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.