Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Obtenir les privilèges de colonne pour une table dans SQL Server à l'aide de T-SQL :sp_column_privileges

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.