sql >> Databasteknik >  >> RDS >> Sqlserver

Få kolumnprivilegier för en tabell i SQL Server med T-SQL:sp_column_privileges

I SQL Server kan du använda sp_column_privileges systemlagrad procedur för att returnera kolumnbehörighetsinformation för en given tabell i den aktuella miljön.

Ange tabellnamnet som ett argument när du kör den lagrade proceduren, så kommer kolumnbehörigheterna att returneras för den tabellen. Du kan också ange tabellägaren, tabellkvalificeraren och/eller kolumnnamnet om det behövs.

Syntax

Syntaxen ser ut så här:

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

@table_name argument är det enda nödvändiga argumentet. Det här är namnet på tabellen som du vill ha kolumnbehörighet från.

Exempel 1 – Returrättigheter för en specifik kolumn

Detta exempel använder alla möjliga argument. Den returnerar privilegier för en specifik kolumn, i en specifik tabell, från en specifik tabellägare, i en specifik databas.

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

Resultat:

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

Här är ett mer kortfattat sätt att göra det:

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

Det ger samma resultat.

Exempel 2 – Ange endast en tabell

I det här exemplet byter jag till en annan databas och anger bara tabellnamnet.

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

Resultat:

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

Detta returnerar privilegierna för alla kolumner i den angivna tabellen.

Observera att du måste finnas i rätt databas. Om jag kör om det föregående exemplet på en annan databas får jag inga resultat.

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

Resultat:

(0 rows affected)

Exempel 3 – Om tabellkvalificeringen

Om du anger @table_qualifier argument, måste det vara samma som den aktuella databasen. Om det inte är det kommer du förmodligen att få felmeddelande 15250.

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

Resultat:

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. Mer om CXPACKET Waits:Skewed Parallelism

  2. Felvärde finns inte - postgresql INSERT INTO-problem

  3. söker programmässigt efter öppen anslutning i JDBC

  4. Uppdatera SQL med konsekutiv numrering