In SQL Server puoi utilizzare sp_column_privileges_ex
stored procedure di sistema per restituire i privilegi di colonna per le colonne da un server collegato specificato.
Puoi specificare una singola colonna oppure puoi specificare tutte le colonne di un determinato database, tabella, ecc.
Sintassi
La sintassi è questa:
sp_column_privileges_ex [ @table_server = ] 'table_server' [ , [ @table_name = ] 'table_name' ] [ , [ @table_schema = ] 'table_schema' ] [ , [ @table_catalog = ] 'table_catalog' ] [ , [ @column_name = ] 'column_name' ]
Il @table_server
argomento è l'unico argomento richiesto. Questo è il nome del server collegato da cui vuoi le informazioni sulla tabella.
Gli altri argomenti sono facoltativi e li tratterò nei seguenti esempi. Per ulteriori informazioni su questi argomenti, vedere la documentazione Microsoft.
Esempio 1:privilegi di restituzione per una colonna specifica
L'esempio seguente restituisce i privilegi per una colonna specifica, in una tabella specifica, da uno schema di tabella specifico, in un database specifico.
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_name = 'City', @table_schema = 'Dimension', @table_catalog = 'WideWorldImportersDW', @column_name = 'Region';
Risultato:
+----------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | COLUMN_NAME | GRANTOR | GRANTEE | PRIVILEGE | IS_GRANTABLE | |----------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------| | WideWorldImportersDW | Dimension | City | Region | dbo | dbo | INSERT | YES | | WideWorldImportersDW | Dimension | City | Region | dbo | dbo | REFERENCES | YES | | WideWorldImportersDW | Dimension | City | Region | dbo | dbo | SELECT | YES | | WideWorldImportersDW | Dimension | City | Region | dbo | dbo | UPDATE | YES | +----------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
Questo potrebbe anche essere eseguito in questo modo:
EXEC sp_column_privileges_ex 'Homer', 'City', 'Dimension', 'WideWorldImportersDW', 'Region';
Esempio 2:utilizzo del database predefinito
Se non fornisci il @table_catalog
argomento (per specificare il database), verrà utilizzato il database predefinito per il server collegato.
Se rimuovo il @table_catalog
argomento dell'esempio precedente:
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_name = 'City', @table_schema = 'Dimension', @column_name = 'Region';
Ottengo il seguente risultato:
(0 rows affected) Time: 0.321s
Questo perché WideWorldImportersDW
database non è il database predefinito per il server collegato. In questo caso, quando ho creato il server collegato, ho utilizzato @catalog = 'Music'
per specificare che il database chiamato Music sarebbe il database predefinito per questo server collegato.
Quindi, se specifico una colonna che si trova nel database predefinito, otterrò risultati:
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_name = 'Artists', @table_schema = 'dbo', @column_name = 'ArtistId';
Ottengo il seguente risultato:
+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | COLUMN_NAME | GRANTOR | GRANTEE | PRIVILEGE | IS_GRANTABLE | |-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------| | 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 | +-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
Esempio 3:specifica solo una tabella
In questo esempio specifico solo il nome della tabella.
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_name = 'Artists';
Risultato:
+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | TABLE_CAT | TABLE_SCHEM | 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 | | Music | dbo | Artists | CountryId | dbo | dbo | INSERT | YES | | Music | dbo | Artists | CountryId | dbo | dbo | REFERENCES | YES | | Music | dbo | Artists | CountryId | dbo | dbo | SELECT | YES | | Music | dbo | Artists | CountryId | dbo | dbo | UPDATE | YES | +-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
Questo restituisce i privilegi per tutte le colonne nella tabella specificata.
Esempio 4:specificare solo il nome della colonna
In questo esempio specifico solo il nome della colonna (anche il server, ovviamente).
EXEC sp_column_privileges_ex @table_server = 'Homer', @column_name = 'ArtistName';
Risultati:
+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | COLUMN_NAME | GRANTOR | GRANTEE | PRIVILEGE | IS_GRANTABLE | |-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------| | 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 | | Music | dbo | BluesAlbums | ArtistName | dbo | dbo | INSERT | YES | | Music | dbo | BluesAlbums | ArtistName | dbo | dbo | REFERENCES | YES | | Music | dbo | BluesAlbums | ArtistName | dbo | dbo | SELECT | YES | | Music | dbo | BluesAlbums | ArtistName | dbo | dbo | UPDATE | YES | | Music | dbo | JazzAlbums | ArtistName | dbo | dbo | INSERT | YES | | Music | dbo | JazzAlbums | ArtistName | dbo | dbo | REFERENCES | YES | | Music | dbo | JazzAlbums | ArtistName | dbo | dbo | SELECT | YES | | Music | dbo | JazzAlbums | ArtistName | dbo | dbo | UPDATE | YES | | Music | dbo | RockAlbums | ArtistName | dbo | dbo | INSERT | YES | | Music | dbo | RockAlbums | ArtistName | dbo | dbo | REFERENCES | YES | | Music | dbo | RockAlbums | ArtistName | dbo | dbo | SELECT | YES | | Music | dbo | RockAlbums | ArtistName | dbo | dbo | UPDATE | YES | +-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
Ciò ha restituito i privilegi per altre tre colonne. Questi provengono da tre viste diverse (il database ha tre viste con un ArtistName
colonna:BluesAlbums
, JazzAlbums
e RockAlbums
).
Esempio 5:specificare solo il server collegato (nessun altro argomento)
Qui specifico solo il server collegato – non fornisco altri argomenti. In questo caso, restituirà tutti i privilegi per tutte le colonne del database:
EXEC sp_column_privileges_ex @table_server = 'Homer';
Non visualizzerò i risultati qui perché ha restituito oltre 26.000 righe. La maggior parte di questi proveniva da sys
schema della tabella.
Esempio 6:specificare uno schema di tabella
L'esempio seguente restringe i risultati a uno schema di tabella specifico (dbo
).
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_schema = 'dbo';
Ciò ha restituito un set di risultati molto più piccolo rispetto all'esempio precedente. È ancora abbastanza grande, quindi non lo visualizzerò qui.
Esempio 7 – Caratteri jolly
Puoi anche usare caratteri jolly. Ecco un esempio di utilizzo del %
carattere jolly:
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'Ar%';
Questo restituisce i privilegi per tutte le colonne che iniziano con Ar
.