sql >> Database >  >> RDS >> Sqlserver

Kolomrechten verkrijgen voor een tabel in SQL Server met T-SQL:sp_column_privileges

In SQL Server kunt u de sp_column_privileges . gebruiken systeem opgeslagen procedure om kolomprivilege-informatie voor een bepaalde tabel in de huidige omgeving te retourneren.

Geef de tabelnaam op als argument bij het uitvoeren van de opgeslagen procedure, en de kolomprivileges worden voor die tabel geretourneerd. U kunt indien nodig ook de eigenaar van de tabel, de kwalificatie van de tabel en/of de kolomnaam opgeven.

Syntaxis

De syntaxis gaat als volgt:

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

De @table_name argument is het enige vereiste argument. Dit is de naam van de tabel waarvan u de kolomrechten wilt hebben.

Voorbeeld 1 – Rechten teruggeven voor een specifieke kolom

Dit voorbeeld gebruikt alle mogelijke argumenten. Het retourneert privileges voor een specifieke kolom, in een specifieke tabel, van een specifieke tabeleigenaar, in een specifieke database.

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

Resultaat:

+--------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
| 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 is een beknoptere manier om het te doen:

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

Dat levert dezelfde resultaten op.

Voorbeeld 2 – Specificeer alleen een tabel

In dit voorbeeld schakel ik over naar een andere database en geef ik alleen de tabelnaam op.

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

Resultaat:

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

Dit retourneert de privileges voor alle kolommen in de gespecificeerde tabel.

Houd er rekening mee dat u zich in de juiste database moet bevinden. Als ik het vorige voorbeeld opnieuw uitvoer op een andere database, krijg ik geen resultaten.

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

Resultaat:

(0 rows affected)

Voorbeeld 3 – Over de tabelkwalificatie

Als u de @table_qualifier . opgeeft argument, moet het hetzelfde zijn als de huidige database. Als dit niet het geval is, krijgt u waarschijnlijk de foutmelding Msg 15250.

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

Resultaten:

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.

  1. AWS Summits 2018:samenvatting van Chicago

  2. MySQL:@variabele versus variabele. Wat is het verschil?

  3. HOE:Geplande taken uitvoeren met Microsoft Access

  4. Hoe de datum in SQL te vergelijken