sql >> Database teknologi >  >> RDS >> Sqlserver

Få kolonneprivilegier til en tabel i SQL Server ved hjælp af T-SQL:sp_column_privileges

I SQL Server kan du bruge sp_column_privileges systemlagret procedure for at returnere oplysninger om kolonneprivilegier for en given tabel i det aktuelle miljø.

Angiv tabelnavnet som et argument, når du udfører den lagrede procedure, og kolonnerettighederne vil blive returneret for den tabel. Du kan også angive tabelejeren, tabelkvalifikationen og/eller kolonnenavnet, hvis det kræves.

Syntaks

Syntaksen ser sådan ud:

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

@table_name argument er det eneste nødvendige argument. Dette er navnet på den tabel, som du vil have kolonneprivilegier fra.

Eksempel 1 – Returneringsrettigheder for en specifik kolonne

Dette eksempel bruger alle mulige argumenter. Det returnerer privilegier for en specifik kolonne, i en specifik tabel, fra en specifik tabelejer, i en specifik database.

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

Her er en mere kortfattet måde at gøre det på:

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

Det giver de samme resultater.

Eksempel 2 – Angiv kun en tabel

I dette eksempel skifter jeg til en anden database og angiver kun tabelnavnet.

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

Dette returnerer privilegierne for alle kolonner i den angivne tabel.

Bemærk, at du skal være i den rigtige database. Hvis jeg kører det forrige eksempel igen på en anden database, får jeg ingen resultater.

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

Resultat:

(0 rows affected)

Eksempel 3 – Om tabelkvalifikationen

Hvis du angiver @table_qualifier argument, skal det være det samme som den aktuelle database. Hvis det ikke er det, vil du sandsynligvis få fejlmeddelelse 15250.

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

Resultater:

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. Sådan håndteres BOB-undtagelser

  2. Sådan skriver du en forespørgsel med flere adfærd

  3. Beregn næste primærnøgle - af specifikt format

  4. Opret indlejrede JSON-arrays ved hjælp af FOR JSON PATH