Configuration de la visibilité des métadonnéesMetadata Visibility Configuration

S’APPLIQUE À : ouiSQL Server ouiAzure SQL Database ouiAzure Synapse Analytics (SQL DW) ouiParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

La visibilité des métadonnées est limitée aux éléments sécurisables qu'un utilisateur détient ou pour lesquels des autorisations lui ont été accordées.The visibility of metadata is limited to securables that a user either owns or on which the user has been granted some permission. Par exemple, la requête suivante retourne une ligne si l'utilisateur bénéficie d'une autorisation telle que SELECT ou INSERT sur la table myTable.For example, the following query returns a row if the user has been granted a permission such as SELECT or INSERT on the table myTable.

SELECT name, object_id  
FROM sys.tables  
WHERE name = N'myTable';  
GO  

Toutefois, si l'utilisateur ne dispose pas d'autorisation sur myTable, la requête renvoie un jeu de résultats vide.However, if the user does not have any permission on myTable, the query returns an empty result set.

Portée et impact de la configuration de la visibilité des métadonnéesScope and Impact of Metadata Visibility Configuration

La configuration de la visibilité des métadonnées ne s'applique qu'aux éléments sécurisables ci-dessous.Metadata visibility configuration only applies to the following securables.

Affichages catalogueCatalog views Procédures stockées du Moteur de base de donnéesDatabase Engine sp_helpMoteur de base de donnéesDatabase Engine sp_help stored procedures
Métadonnées exposant des fonctions intégréesMetadata exposing built-in functions Affichages des schémas d'informationInformation schema views
vues de compatibilité ;Compatibility views Propriétés étenduesExtended properties

La configuration de la visibilité des métadonnées ne s'applique pas aux éléments sécurisables ci-dessous.Metadata visibility configuration does not apply to the following securables.

Tables système de copie des journaux de transactionLog shipping system tables SQL ServerSQL Server Tables système de l’AgentAgent system tables
Tables système des plans de maintenance de base de donnéesDatabase maintenance plan system tables Tables système de sauvegardesBackup system tables
Tables système de réplicationReplication system tables Procédures stockées SQL ServerSQL Server sp_help de la réplication et de l’AgentReplication and SQL ServerSQL Server Agent sp_help stored procedures

Une accessibilité restreinte aux métadonnées implique les conséquences suivantes :Limited metadata accessibility means the following:

  • Les applications qui sous-entendent un accès aux métadonnées public s’interrompront.Applications that assume public metadata access will break.

  • Les requêtes portant sur les vues système risqueront de renvoyer simplement un sous-ensemble de lignes et même parfois un jeu de résultats vide.Queries on system views might only return a subset of rows, or sometimes an empty result set.

  • Les fonctions intégrées émettant des métadonnées telles que OBJECTPROPERTYEX peuvent renvoyer une valeur NULL.Metadata-emitting, built-in functions such as OBJECTPROPERTYEX may return NULL.

  • Les procédures stockées Moteur de base de donnéesDatabase Engine sp_help peuvent retourner uniquement un sous-ensemble de lignes ou la valeur NULL.The Moteur de base de donnéesDatabase Engine sp_help stored procedures might return only a subset of rows, or NULL.

Les modules SQL, tels que les procédures stockées et les déclencheurs, fonctionnent dans le contexte de sécurité de l'appelant et, par conséquent, auront un accès limité aux métadonnées.SQL modules, such as stored procedures and triggers, run under the security context of the caller and, therefore, have limited metadata accessibility. Dans le code suivant par exemple, lorsque la procédure stockée tente d'accéder aux métadonnées de la table myTable pour laquelle l'appelant n'a aucune autorisation, un jeu de résultats vide est renvoyé.For example, in the following code, when the stored procedure tries to access metadata for the table myTable on which the caller has no rights, an empty result set is returned. Dans les versions antérieures de SQL ServerSQL Server, une ligne est renvoyée.In earlier releases of SQL ServerSQL Server, a row is returned.

CREATE PROCEDURE assumes_caller_can_access_metadata  
BEGIN  
SELECT name, object_id   
FROM sys.objects   
WHERE name = N'myTable';  
END;  
GO  

Si vous voulez autoriser les appelants à consulter les métadonnées, vous pouvez leur accorder l'autorisation VIEW DEFINITION avec une étendue appropriée : niveau de l'objet, niveau de la base de données ou niveau du serveur.To allow callers to view metadata, you can grant the callers VIEW DEFINITION permission at an appropriate scope: object level, database level or server level. Si, dans le cas de l'exemple précédent, l'appelant bénéficie d'une autorisation VIEW DEFINITION sur myTable, la procédure stockée renvoie une ligne.Therefore, in the previous example, if the caller has VIEW DEFINITION permission on myTable, the stored procedure returns a row. Pour plus d’informations, consultez GRANT (Transact-SQL) et GRANT – octroi d’autorisations de base de données (Transact-SQL).For more information, see GRANT (Transact-SQL) and GRANT Database Permissions (Transact-SQL).

Vous pouvez également modifier la procédure stockée pour qu'elle s'exécute avec les informations d'identification du propriétaire.You can also modify the stored procedure so that it executes under the credentials of the owner. Si le propriétaire de la procédure et celui de la table sont identiques, le chaînage des propriétés s'applique et le contexte de sécurité du propriétaire de la procédure permet d'accéder aux métadonnées de myTable.When the procedure owner and the table owner are the same owner, ownership chaining applies, and the security context of the procedure owner enables access to the metadata for myTable. Dans ces circonstances, le code suivant renvoie une ligne de métadonnées à l'appelant.Under this scenario, the following code returns a row of metadata to the caller.

Notes

L’exemple suivant utilise l’affichage catalogue sys.objects au lieu de l’affichage de compatibilité sys.sysobjects .The following example uses the sys.objects catalog view instead of the sys.sysobjects compatibility view.

CREATE PROCEDURE does_not_assume_caller_can_access_metadata  
WITH EXECUTE AS OWNER  
AS  
BEGIN  
SELECT name, object_id  
FROM sys.objects   
WHERE name = N'myTable'   
END;  
GO  

Notes

Vous pouvez utiliser EXECUTE AS pour basculer temporairement dans le contexte de sécurité de l'appelant.You can use EXECUTE AS to temporarily switch to the security context of the caller. Pour plus d’informations, consultez EXECUTE AS (Transact-SQL).For more information, see EXECUTE AS (Transact-SQL).

Avantages et inconvénients de la configuration de la visibilité des métadonnéesBenefits and Limits of Metadata Visibility Configuration

La configuration de la visibilité des métadonnées peut jouer un rôle important dans votre plan de sécurité global.Metadata visibility configuration can play an important role in your overall security plan. Sachez quand même qu'il existe des cas où un utilisateur expérimenté et déterminé peut enfreindre la confidentialité de certaines métadonnées.However, there are cases in which a skilled and determined user can force the disclosure of some metadata. Nous vous recommandons de déployer des autorisations d'accès aux métadonnées comme d'autres mesures préventives efficaces.We recommend that you deploy metadata permissions as one of many defenses-in-depth.

Il est théoriquement possible d'imposer l'émission de métadonnées dans les messages d'erreur en manipulant l'ordre d'évaluation de prédicat dans les requêtes.It is theoretically possible to force the emission of metadata in error messages by manipulating the order of predicate evaluation in queries. L’éventualité d’ attaques de type essai et erreur de cette sorte n’est pas propre à SQL ServerSQL Server.The possibility of such trial-and-error attacks is not specific to SQL ServerSQL Server. Elle provient implicitement des transformations associatives et commutatives autorisées en algèbre relationnel.It is implied by the associative and commutative transformations permitted in relational algebra. Vous pouvez réduire ce risque en limitant les informations retournées dans les messages d'erreur.You can mitigate this risk by limiting the information returned in error messages. Pour restreindre encore la visibilité des métadonnées dans ce sens, vous pouvez démarrer le serveur avec l'indicateur de trace 3625.To further restrict the visibility of metadata in this way, you can start the server with trace flag 3625. Cet indicateur de trace limite la quantité d'informations affichées dans les messages d'erreur.This trace flag limits the amount of information shown in error messages. À son tour, cela contribue à éviter les divulgations forcées.In turn, this helps to prevent forced disclosures. En échange, les messages d'erreur seront succincts et plus difficiles à utiliser à des fins de débogage.The tradeoff is that error messages will be terse and might be difficult to use for debugging purposes. Pour plus d’informations, consultez Options de démarrage du service moteur de base de données et Indicateurs de trace (Transact-SQL).For more information, see Database Engine Service Startup Options and Trace Flags (Transact-SQL).

Les métadonnées suivantes ne peuvent pas être violées :The following metadata is not subject to forced disclosure:

  • Valeur stockée dans la colonne provider_string de sys.servers.The value stored in the provider_string column of sys.servers. Sans autorisation ALTER ANY LINKED SERVER, un utilisateur verra une valeur NULL dans cette colonne.A user that does not have ALTER ANY LINKED SERVER permission will see a NULL value in this column.

  • Définition source d'un objet défini par l'utilisateur tel qu'une procédure stockée ou un déclencheur.Source definition of a user-defined object such as a stored procedure or trigger. Le code source n'est visible que si l'une des conditions suivantes est remplie :The source code is visible only when one of the following is true:

    • L'utilisateur dispose de l'autorisation VIEW DEFINITION pour l'objet.The user has VIEW DEFINITION permission on the object.

    • L'autorisation VIEW DEFINITION pour l'objet n'a pas été refusée à l'utilisateur et ce dernier bénéficie de l'autorisation CONTROL, ALTER ou TAKE OWNERSHIP sur l'objet.The user has not been denied VIEW DEFINITION permission on the object and has CONTROL, ALTER, or TAKE OWNERSHIP permission on the object. Tous les autres utilisateurs verront la valeur NULL.All other users will see NULL.

  • Colonnes de définitions qui se trouvent dans les affichages catalogue suivants :The definition columns found in the following catalog views:

    sys.all_sql_modulessys.all_sql_modules sys.sql_modulessys.sql_modules
    sys.server_sql_modulessys.server_sql_modules sys.check_constraintssys.check_constraints
    sys.default_constraintssys.default_constraints sys.computed_columnssys.computed_columns
    sys.numbered_proceduressys.numbered_procedures
  • Colonne ctext de l’affichage de compatibilité syscommentsThe ctext column in the syscomments compatibility view.

  • Sortie de la procédure stockée sp_helptextThe output of the sp_helptext procedure.

  • Colonnes suivantes des affichages des schémas d'information :The following columns in the information schema views:

    INFORMATION_SCHEMA.CHECK_CONSTRAINTS.CHECK_CLAUSEINFORMATION_SCHEMA.CHECK_CONSTRAINTS.CHECK_CLAUSE INFORMATION_SCHEMA.COLUMNS.COLUMN_DEFAULTINFORMATION_SCHEMA.COLUMNS.COLUMN_DEFAULT
    INFORMATION_SCHEMA.DOMAINS.DOMAIN_DEFAULTINFORMATION_SCHEMA.DOMAINS.DOMAIN_DEFAULT INFORMATION_SCHEMA.ROUTINE_COLUMNS.COLUMN_DEFAULTINFORMATION_SCHEMA.ROUTINE_COLUMNS.COLUMN_DEFAULT
    INFORMATION_SCHEMA.ROUTINES.ROUTINE_DEFINITIONINFORMATION_SCHEMA.ROUTINES.ROUTINE_DEFINITION INFORMATION_SCHEMA.VIEWS.VIEW_DEFINITIONINFORMATION_SCHEMA.VIEWS.VIEW_DEFINITION
  • Fonction OBJECT_DEFINITION()OBJECT_DEFINITION() function

  • Valeur stockée dans la colonne password_hash de sys.sql_logins.The value stored in the password_hash column of sys.sql_logins. Un utilisateur qui ne possède pas l'autorisation CONTROL SERVER verra une valeur NULL dans cette colonne.A user that does not have CONTROL SERVER permission will see a NULL value in this column.

Notes

Les définitions SQL des procédures et des fonctions système intégrées sont visibles par tous par l’intermédiaire de l’affichage catalogue sys.system_sql_modules , de la procédure stockée sp_helptext et de la fonction OBJECT_DEFINITION().The SQL definitions of built-in system procedures and functions are publicly visible through the sys.system_sql_modules catalog view, the sp_helptext stored procedure, and the OBJECT_DEFINITION() function.

Principes généraux de la visibilité des métadonnéesGeneral Principles of Metadata Visibility

Voici quelques points à prendre en compte en termes de visibilité des métadonnées :The following are some general principles to consider regarding metadata visibility:

  • Autorisations implicites des rôles fixesFixed roles implicit permissions

  • Étendue des autorisationsScope of permissions

  • Priorité de DENYPrecedence of DENY

  • Visibilité des métadonnées des sous-composantsVisibility of subcomponent metadata

Rôles fixes et autorisations implicitesFixed Roles and Implicit Permissions

Les métadonnées accessibles par les rôles fixes dépendent des autorisations implicites qui s'y rapportent.Metadata that can be accessed by fixed roles depends upon their corresponding implicit permissions.

Étendue des autorisationsScope of Permissions

Les autorisations délivrées à une étendue impliquent la possibilité de voir les métadonnées à ce niveau et à tous les niveaux inférieurs qui en dépendent.Permissions at one scope imply the ability to see metadata at that scope and at all enclosed scopes. Par exemple, si une autorisation SELECT a été accordée à un utilisateur sur un schéma, le bénéficiaire possède l'autorisation SELECT sur tous les éléments sécurisables contenus dans ce schéma.For example, SELECT permission on a schema implies that the grantee has SELECT permission on all securables that are contained by that schema. L'octroi de l'autorisation SELECT sur un schéma permet donc à un utilisateur de consulter les métadonnées du schéma ainsi que des tables, vues, fonctions, procédures, files d'attente, synonymes, types et collections de schémas XML qu'il renferme.The granting of SELECT permission on a schema therefore enables a user to see the metadata of the schema and also all tables, views, functions, procedures, queues, synonyms, types, and XML schema collections within it. Pour plus d’informations sur les étendues, consultez Hiérarchie des autorisations (moteur de base de données).For more information about scopes, see Permissions Hierarchy (Database Engine).

Priorité de DENYPrecedence of DENY

DENY a généralement la priorité sur toutes les autres autorisations.DENY typically takes precedence over other permissions. Par exemple, si un utilisateur de base de données dispose d'une autorisation EXECUTE sur un schéma, mais que l'autorisation EXECUTE lui a été refusée sur une procédure stockée de ce schéma, l'utilisateur ne peut pas voir les métadonnées de cette procédure stockée.For example, if a database user is granted EXECUTE permission on a schema but has been denied EXECUTE permission on a stored procedure in that schema, the user cannot view the metadata for that stored procedure.

De plus, si un utilisateur se voit refuser l'autorisation EXECUTE pour un schéma alors qu'il dispose de l'autorisation EXECUTE pour une procédure stockée de ce schéma, l'utilisateur ne peut pas voir les métadonnées de cette procédure stockée.Additionally, if a user is denied EXECUTE permission on a schema but has been granted EXECUTE permission on a stored procedure in that schema, the user cannot view the metadata for that stored procedure.

Prenons un autre exemple. Si l'autorisation EXECUTE a été accordée, puis refusée à un utilisateur sur une procédure stockée, ce qui est possible par le biais de diverses appartenances aux rôles, DENY reste prioritaire et l'utilisateur ne peut pas voir les métadonnées de la procédure stockée.For another example, if a user has been granted and denied EXECUTE permission on a stored procedure, which is possible through your various role memberships, DENY takes precedence and the user cannot view the metadata of the stored procedure.

Visibilité des métadonnées des sous-composantsVisibility of Subcomponent Metadata

La visibilité des sous-composants que sont les index, les contraintes de validation et les déclencheurs est déterminée par les autorisations accordées au parent.The visibility of subcomponents, such as indexes, check constraints, and triggers is determined by permissions on the parent. Ces sous-composants ne bénéficient pas d'autorisations transmissibles.These subcomponents do not have grantable permissions. Par exemple, si un utilisateur dispose d'une autorisation sur une table, il peut voir les métadonnées correspondant aux colonnes de la table, aux index, aux contraintes de validation, aux déclencheurs et à d'autres sous-composants de la sorte.For example, if a user has been granted some permission on a table, the user can view the metadata for the tables, columns, indexes, check constraints, triggers, and other such subcomponents.

Métadonnées accessibles à tous les utilisateurs de la base de donnéesMetadata That Is Accessible to All Database Users

Certaines métadonnées doivent rester accessibles à tous les utilisateurs dans une base de données spécifique.Some metadata must be accessible to all users in a specific database. Par exemple, dans la mesure où les groupes de fichiers ne peuvent pas recevoir d'autorisations, il est impossible d'octroyer à un utilisateur l'autorisation de consulter les métadonnées d'un groupe de fichiers.For example, filegroups do not have conferrable permissions; therefore, a user cannot be granted permission to view the metadata of a filegroup. En revanche, tout utilisateur qui peut créer une table doit pouvoir accéder aux métadonnées du groupe de fichiers pour utiliser les clauses ON groupe_fichiers ou TEXTIMAGE_ON groupe_fichiers de l’instruction CREATE TABLE.However, any user that can create a table must be able to access filegroup metadata to use the ON filegroup or TEXTIMAGE_ON filegroup clauses of the CREATE TABLE statement.

Les métadonnées renvoyées par les fonctions DB_ID() et DB_NAME() sont visibles par tous les utilisateurs.The metadata that is returned by the DB_ID() and DB_NAME() functions is visible to all users.

Le tableau ci-dessous répertorie les affichages catalogue qui sont visibles par le rôle public .The following table lists the catalog views that are visible to the public role.

sys.partition_functionssys.partition_functions sys.partition_range_valuessys.partition_range_values
sys.partition_schemessys.partition_schemes sys.data_spacessys.data_spaces
sys.filegroupssys.filegroups sys.destination_data_spacessys.destination_data_spaces
sys.database_filessys.database_files sys.allocation_unitssys.allocation_units
sys.partitionssys.partitions sys.messagessys.messages
sys.schemassys.schemas sys.configurationssys.configurations
sys.sql_dependenciessys.sql_dependencies sys.type_assembly_usagessys.type_assembly_usages
sys.parameter_type_usagessys.parameter_type_usages sys.column_type_usagessys.column_type_usages

Voir aussiSee Also

GRANT (Transact-SQL) GRANT (Transact-SQL)
DENY (Transact-SQL) DENY (Transact-SQL)
REVOKE (Transact-SQL) REVOKE (Transact-SQL)
Clause EXECUTE AS (Transact-SQL) EXECUTE AS Clause (Transact-SQL)
Affichages catalogue (Transact-SQL) Catalog Views (Transact-SQL)
Affichages de compatibilité (Transact-SQL)Compatibility Views (Transact-SQL)