In SQL Server puoi usare sp_table_privileges_ex
stored procedure di sistema per restituire le informazioni sui privilegi su una tabella specificata da un server collegato specificato.
È possibile specificare una singola tabella oppure specificare tutte le tabelle da un determinato database o schema di tabelle. È inoltre possibile utilizzare i caratteri jolly per specificare la/le tabella/e. Tuttavia, puoi anche specificare se i caratteri jolly devono essere interpretati come caratteri jolly.
Sintassi
La sintassi è questa:
sp_table_privileges_ex [ @table_server = ] 'table_server' [ , [ @table_name = ] 'table_name' ] [ , [ @table_schema = ] 'table_schema' ] [ , [ @table_catalog = ] 'table_catalog' ] [ , [@fUsePattern =] 'fUsePattern']
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 sono illustrati nei seguenti esempi.
Esempio 1:privilegi di restituzione per una tabella specifica
Questo esempio restituisce i privilegi per una colonna specifica, in una tabella specifica, da uno schema di tabella specifico, in un database specifico.
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_name = 'City', @table_schema = 'Dimension', @table_catalog = 'WideWorldImportersDW';
Risultato:
+----------------------+---------------+--------------+-----------+-----------+-------------+----------------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | GRANTOR | GRANTEE | PRIVILEGE | IS_GRANTABLE | |----------------------+---------------+--------------+-----------+-----------+-------------+----------------| | WideWorldImportersDW | Dimension | City | dbo | dbo | DELETE | YES | | WideWorldImportersDW | Dimension | City | dbo | dbo | INSERT | YES | | WideWorldImportersDW | Dimension | City | dbo | dbo | REFERENCES | YES | | WideWorldImportersDW | Dimension | City | dbo | dbo | SELECT | YES | | WideWorldImportersDW | Dimension | City | dbo | dbo | UPDATE | YES | +----------------------+---------------+--------------+-----------+-----------+-------------+----------------+
Questo potrebbe anche essere eseguito in questo modo:
EXEC sp_table_privileges_ex 'Homer', 'City', 'Dimension', 'WideWorldImportersDW';
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_table_privileges_ex @table_server = 'Homer', @table_name = 'City', @table_schema = 'Dimension';
Ottengo il seguente risultato:
(0 rows affected) Time: 0.311s
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_table_privileges_ex @table_server = 'Homer', @table_name = 'Artists';
Ottengo il seguente risultato:
+-------------+---------------+--------------+-----------+-----------+-------------+----------------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | GRANTOR | GRANTEE | PRIVILEGE | IS_GRANTABLE | |-------------+---------------+--------------+-----------+-----------+-------------+----------------| | Music | dbo | Artists | dbo | dbo | DELETE | YES | | Music | dbo | Artists | dbo | dbo | INSERT | YES | | Music | dbo | Artists | dbo | dbo | REFERENCES | YES | | Music | dbo | Artists | dbo | dbo | SELECT | YES | | Music | dbo | Artists | dbo | dbo | UPDATE | YES | +-------------+---------------+--------------+-----------+-----------+-------------+----------------+
Si noti che non ho specificato lo schema della tabella in questo esempio, poiché è facoltativo.
Esempio 3:specificare solo il nome dello schema della tabella
In questo esempio specifico solo il nome dello schema (anche il server, ovviamente).
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_schema = 'dbo';
Ciò restituisce 35 righe sul mio sistema. Questo copre 4 tabelle e 3 viste.
Esempio 4: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_table_privileges_ex @table_server = 'Homer';
Non visualizzerò i risultati qui perché ha restituito oltre 3.000 righe. La maggior parte di questi proveniva da sys
schema della tabella.
Esempio 5 – Caratteri jolly
Puoi anche usare caratteri jolly. Ecco un esempio di utilizzo del %
carattere jolly:
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_name = 'Ar%';
Risultato:
+-------------+---------------+--------------+-----------+-----------+-------------+----------------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | GRANTOR | GRANTEE | PRIVILEGE | IS_GRANTABLE | |-------------+---------------+--------------+-----------+-----------+-------------+----------------| | Music | dbo | Artists | dbo | dbo | DELETE | YES | | Music | dbo | Artists | dbo | dbo | INSERT | YES | | Music | dbo | Artists | dbo | dbo | REFERENCES | YES | | Music | dbo | Artists | dbo | dbo | SELECT | YES | | Music | dbo | Artists | dbo | dbo | UPDATE | YES | +-------------+---------------+--------------+-----------+-----------+-------------+----------------+
Questo restituisce i privilegi per tutte le tabelle che iniziano con Ar
.
Tuttavia, puoi anche usare @fUsePattern
argomento per determinare se i caratteri jolly devono essere interpretati o meno come caratteri jolly. Il valore predefinito è 1
, il che significa che devono essere interpretati come caratteri jolly. Un valore di 0
specifica che non devono essere interpretati come caratteri jolly.
Ecco cosa succede se aggiungo @fUsePattern = 0
all'esempio precedente:
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_name = 'Ar%', @fUsePattern = 0;
Risultato:
(0 rows affected) Time: 0.318s
Ed ecco cosa succede se lo imposto su 1
:
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_name = 'Ar%', @fUsePattern = 1;
Risultato:
+-------------+---------------+--------------+-----------+-----------+-------------+----------------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | GRANTOR | GRANTEE | PRIVILEGE | IS_GRANTABLE | |-------------+---------------+--------------+-----------+-----------+-------------+----------------| | Music | dbo | Artists | dbo | dbo | DELETE | YES | | Music | dbo | Artists | dbo | dbo | INSERT | YES | | Music | dbo | Artists | dbo | dbo | REFERENCES | YES | | Music | dbo | Artists | dbo | dbo | SELECT | YES | | Music | dbo | Artists | dbo | dbo | UPDATE | YES | +-------------+---------------+--------------+-----------+-----------+-------------+----------------+