Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Ottieni i privilegi di colonna per una tabella in SQL Server utilizzando T-SQL:sp_column_privileges

In SQL Server puoi usare sp_column_privileges stored procedure di sistema per restituire le informazioni sui privilegi di colonna per una determinata tabella nell'ambiente corrente.

Fornire il nome della tabella come argomento durante l'esecuzione della procedura memorizzata e i privilegi della colonna verranno restituiti per quella tabella. Puoi anche fornire il proprietario della tabella, il qualificatore della tabella e/o il nome della colonna, se necessario.

Sintassi

La sintassi è questa:

sp_column_privileges [ @table_name = ] 'table_name'   
     [ , [ @table_owner = ] 'table_owner' ]   
     [ , [ @table_qualifier = ] 'table_qualifier' ]   
     [ , [ @column_name = ] 'column' ]

Il @table_name argomento è l'unico argomento richiesto. Questo è il nome della tabella da cui desideri i privilegi di colonna.

Esempio 1:privilegi di restituzione per una colonna specifica

Questo esempio utilizza tutti gli argomenti possibili. Restituisce i privilegi per una colonna specifica, in una tabella specifica, da un proprietario di tabella specifico, in un database specifico.

EXEC sp_column_privileges 
  @table_name = 'Cities', 
  @table_owner = 'Application',   
  @table_qualifier = 'WideWorldImporters',   
  @column_name = 'Location';

Risultato:

+--------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
| 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            |
+--------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+

Ecco un modo più conciso per farlo:

sp_column_privileges 
  'Cities', 
  'Application',   
  'WideWorldImporters',   
  'Location';

Ciò restituisce gli stessi risultati.

Esempio 2:specifica solo una tabella

In questo esempio passo a un altro database e specifico solo il nome della tabella.

USE Music;
EXEC sp_column_privileges
  @table_name = 'Artists';

Risultato:

+-------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
| 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            |
+-------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+

Questo restituisce i privilegi per tutte le colonne nella tabella specificata.

Nota che devi essere nel database corretto. Se eseguo nuovamente l'esempio precedente su un database diverso, non ottengo risultati.

USE WideWorldImporters;
EXEC sp_column_privileges
  @table_name = 'Artists';

Risultato:

(0 rows affected)

Esempio 3 – Informazioni sul qualificatore al tavolo

Se fornisci il @table_qualifier argomento, deve essere lo stesso del database corrente. In caso contrario, probabilmente riceverai l'errore Msg 15250.

USE Music;
EXEC sp_column_privileges
  @table_name = 'Artists',
  @table_qualifier = 'WideWorldImporters';

Risultati:

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.