Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Holen Sie sich Spaltenberechtigungen für eine Tabelle in SQL Server mit T-SQL:sp_column_privileges

In SQL Server können Sie die sp_column_privileges verwenden gespeicherte Systemprozedur, um Spaltenberechtigungsinformationen für eine bestimmte Tabelle in der aktuellen Umgebung zurückzugeben.

Geben Sie beim Ausführen der gespeicherten Prozedur den Tabellennamen als Argument an, und die Spaltenberechtigungen werden für diese Tabelle zurückgegeben. Sie können bei Bedarf auch den Tabelleneigentümer, den Tabellenqualifizierer und/oder den Spaltennamen angeben.

Syntax

Die Syntax lautet wie folgt:

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

Der @table_name Argument ist das einzige erforderliche Argument. Dies ist der Name der Tabelle, von der Sie die Spaltenberechtigungen erhalten möchten.

Beispiel 1 – Berechtigungen für eine bestimmte Spalte zurückgeben

Dieses Beispiel verwendet alle möglichen Argumente. Es gibt Berechtigungen für eine bestimmte Spalte in einer bestimmten Tabelle von einem bestimmten Tabelleneigentümer in einer bestimmten Datenbank zurück.

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

Ergebnis:

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

Hier ist eine prägnantere Methode:

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

Das gibt dieselben Ergebnisse zurück.

Beispiel 2 – Geben Sie nur eine Tabelle an

In diesem Beispiel wechsle ich zu einer anderen Datenbank und gebe nur den Tabellennamen an.

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

Ergebnis:

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

Dies gibt die Privilegien für alle Spalten in der angegebenen Tabelle zurück.

Beachten Sie, dass Sie sich in der richtigen Datenbank befinden müssen. Wenn ich das vorherige Beispiel auf einer anderen Datenbank erneut ausführe, erhalte ich keine Ergebnisse.

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

Ergebnis:

(0 rows affected)

Beispiel 3 – Über den Tabellenqualifizierer

Wenn Sie @table_qualifier angeben -Argument muss es mit der aktuellen Datenbank identisch sein. Ist dies nicht der Fall, erhalten Sie wahrscheinlich die Fehlermeldung 15250.

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

Ergebnisse:

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.