Dans SQL Server, vous pouvez utiliser le sp_column_privileges
procédure stockée système pour renvoyer les informations de privilège de colonne pour une table donnée dans l'environnement actuel.
Fournissez le nom de la table comme argument lors de l'exécution de la procédure stockée et les privilèges de colonne seront renvoyés pour cette table. Vous pouvez également fournir le propriétaire de la table, le qualificatif de la table et/ou le nom de la colonne si nécessaire.
Syntaxe
La syntaxe ressemble à ceci :
sp_column_privileges [ @table_name = ] 'table_name' [ , [ @table_owner = ] 'table_owner' ] [ , [ @table_qualifier = ] 'table_qualifier' ] [ , [ @column_name = ] 'column' ]
Le @table_name
argument est le seul argument requis. Il s'agit du nom de la table dont vous souhaitez obtenir les privilèges de colonne.
Exemple 1 – Privilèges de retour pour une colonne spécifique
Cet exemple utilise tous les arguments possibles. Il renvoie des privilèges pour une colonne spécifique, dans une table spécifique, à partir d'un propriétaire de table spécifique, dans une base de données spécifique.
EXEC sp_column_privileges @table_name = 'Cities', @table_owner = 'Application', @table_qualifier = 'WideWorldImporters', @column_name = 'Location';
Résultat :
+--------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | COLUMN_NAME | GRANTOR | GRANTEE | PRIVILEGE | IS_GRANTABLE | |--------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------| | WideWorldImporters | Application | Cities | Location | dbo | dbo | INSERT | YES | | WideWorldImporters | Application | Cities | Location | dbo | dbo | REFERENCES | YES | | WideWorldImporters | Application | Cities | Location | dbo | dbo | SELECT | YES | | WideWorldImporters | Application | Cities | Location | dbo | dbo | UPDATE | YES | +--------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
Voici une façon plus concise de procéder :
sp_column_privileges 'Cities', 'Application', 'WideWorldImporters', 'Location';
Cela renvoie les mêmes résultats.
Exemple 2 - Spécifiez une table uniquement
Dans cet exemple, je passe à une autre base de données et ne spécifie que le nom de la table.
USE Music; EXEC sp_column_privileges @table_name = 'Artists';
Résultat :
+-------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | COLUMN_NAME | GRANTOR | GRANTEE | PRIVILEGE | IS_GRANTABLE | |-------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------| | Music | dbo | Artists | ActiveFrom | dbo | dbo | INSERT | YES | | Music | dbo | Artists | ActiveFrom | dbo | dbo | REFERENCES | YES | | Music | dbo | Artists | ActiveFrom | dbo | dbo | SELECT | YES | | Music | dbo | Artists | ActiveFrom | dbo | dbo | UPDATE | YES | | Music | dbo | Artists | ArtistId | dbo | dbo | INSERT | YES | | Music | dbo | Artists | ArtistId | dbo | dbo | REFERENCES | YES | | Music | dbo | Artists | ArtistId | dbo | dbo | SELECT | YES | | Music | dbo | Artists | ArtistId | dbo | dbo | UPDATE | YES | | Music | dbo | Artists | ArtistName | dbo | dbo | INSERT | YES | | Music | dbo | Artists | ArtistName | dbo | dbo | REFERENCES | YES | | Music | dbo | Artists | ArtistName | dbo | dbo | SELECT | YES | | Music | dbo | Artists | ArtistName | dbo | dbo | UPDATE | YES | +-------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
Cela renvoie les privilèges pour toutes les colonnes de la table spécifiée.
Notez que vous devez être dans la bonne base de données. Si je relance l'exemple précédent sur une autre base de données, je n'obtiens aucun résultat.
USE WideWorldImporters; EXEC sp_column_privileges @table_name = 'Artists';
Résultat :
(0 rows affected)
Exemple 3 - À propos du qualificatif de table
Si vous fournissez le @table_qualifier
argument, il doit être identique à la base de données actuelle. Si ce n'est pas le cas, vous obtiendrez probablement le message d'erreur 15250.
USE Music; EXEC sp_column_privileges @table_name = 'Artists', @table_qualifier = 'WideWorldImporters';
Résultats :
Msg 15250, Level 16, State 1, Procedure sp_column_privileges, Line 19 The database name component of the object qualifier must be the name of the current database.