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.