sql >> Databasteknik >  >> RDS >> Sqlserver

Returnera kolumnprivilegier från en länkad server i SQL Server (T-SQL-exempel)

I SQL Server kan du använda sp_column_privileges_ex systemlagrad procedur för att returnera kolumnprivilegier för kolumnerna från en specificerad länkad server.

Du kan ange en enskild kolumn, eller så kan du ange alla kolumner från en given databas, tabell, etc.

Syntax

Syntaxen ser ut så här:

sp_column_privileges_ex [ @table_server = ] 'table_server'   
     [ , [ @table_name = ] 'table_name' ]   
     [ , [ @table_schema = ] 'table_schema' ]   
     [ , [ @table_catalog = ] 'table_catalog' ]   
     [ , [ @column_name = ] 'column_name' ]

@table_server argument är det enda nödvändiga argumentet. Detta är namnet på den länkade servern som du vill ha tabellinformationen från.

De andra argumenten är valfria, och jag täcker dem i följande exempel. Mer information om dessa argument finns i Microsofts dokumentation.

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

Följande exempel returnerar privilegier för en specifik kolumn, i en specifik tabell, från ett specifikt tabellschema, i en specifik databas.

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'City', 
  @table_schema = 'Dimension',   
  @table_catalog = 'WideWorldImportersDW',   
  @column_name = 'Region';

Resultat:

+----------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
| TABLE_CAT            | TABLE_SCHEM   | TABLE_NAME   | COLUMN_NAME   | GRANTOR   | GRANTEE   | PRIVILEGE   | IS_GRANTABLE   |
|----------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------|
| WideWorldImportersDW | Dimension     | City         | Region        | dbo       | dbo       | INSERT      | YES            |
| WideWorldImportersDW | Dimension     | City         | Region        | dbo       | dbo       | REFERENCES  | YES            |
| WideWorldImportersDW | Dimension     | City         | Region        | dbo       | dbo       | SELECT      | YES            |
| WideWorldImportersDW | Dimension     | City         | Region        | dbo       | dbo       | UPDATE      | YES            |
+----------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+

Detta kan också utföras så här:

EXEC sp_column_privileges_ex 
  'Homer',
  'City', 
  'Dimension',   
  'WideWorldImportersDW',   
  'Region';

Exempel 2 – Använda standarddatabasen

Om du inte tillhandahåller @table_catalog argument (för att ange databasen), kommer standarddatabasen för den länkade servern att användas.

Om jag tar bort @table_catalog argument från föregående exempel:

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'City', 
  @table_schema = 'Dimension',
  @column_name = 'Region';

Jag får följande resultat:

(0 rows affected)
Time: 0.321s

Detta beror på att WideWorldImportersDW databasen är inte standarddatabasen för den länkade servern. I det här fallet, när jag skapade den länkade servern, använde jag @catalog = 'Music' för att ange att databasen som heter Musik skulle vara standarddatabasen för denna länkade server.

Så om jag anger en kolumn som råkar finnas i standarddatabasen får jag resultat:

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'Artists', 
  @table_schema = 'dbo',
  @column_name = 'ArtistId';

Jag får följande resultat:

+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
| TABLE_CAT   | TABLE_SCHEM   | TABLE_NAME   | COLUMN_NAME   | GRANTOR   | GRANTEE   | PRIVILEGE   | IS_GRANTABLE   |
|-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------|
| 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            |
+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+

Exempel 3 – Ange endast en tabell

I det här exemplet anger jag bara tabellnamnet.

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'Artists';

Resultat:

+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
| TABLE_CAT   | TABLE_SCHEM   | 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            |
| Music       | dbo           | Artists      | CountryId     | dbo       | dbo       | INSERT      | YES            |
| Music       | dbo           | Artists      | CountryId     | dbo       | dbo       | REFERENCES  | YES            |
| Music       | dbo           | Artists      | CountryId     | dbo       | dbo       | SELECT      | YES            |
| Music       | dbo           | Artists      | CountryId     | dbo       | dbo       | UPDATE      | YES            |
+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+

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

Exempel 4 – Ange endast kolumnnamnet

I det här exemplet anger jag endast kolumnnamnet (även servern, självklart).

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',   
  @column_name = 'ArtistName';

Resultat:

+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
| TABLE_CAT   | TABLE_SCHEM   | TABLE_NAME   | COLUMN_NAME   | GRANTOR   | GRANTEE   | PRIVILEGE   | IS_GRANTABLE   |
|-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------|
| 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            |
| Music       | dbo           | BluesAlbums  | ArtistName    | dbo       | dbo       | INSERT      | YES            |
| Music       | dbo           | BluesAlbums  | ArtistName    | dbo       | dbo       | REFERENCES  | YES            |
| Music       | dbo           | BluesAlbums  | ArtistName    | dbo       | dbo       | SELECT      | YES            |
| Music       | dbo           | BluesAlbums  | ArtistName    | dbo       | dbo       | UPDATE      | YES            |
| Music       | dbo           | JazzAlbums   | ArtistName    | dbo       | dbo       | INSERT      | YES            |
| Music       | dbo           | JazzAlbums   | ArtistName    | dbo       | dbo       | REFERENCES  | YES            |
| Music       | dbo           | JazzAlbums   | ArtistName    | dbo       | dbo       | SELECT      | YES            |
| Music       | dbo           | JazzAlbums   | ArtistName    | dbo       | dbo       | UPDATE      | YES            |
| Music       | dbo           | RockAlbums   | ArtistName    | dbo       | dbo       | INSERT      | YES            |
| Music       | dbo           | RockAlbums   | ArtistName    | dbo       | dbo       | REFERENCES  | YES            |
| Music       | dbo           | RockAlbums   | ArtistName    | dbo       | dbo       | SELECT      | YES            |
| Music       | dbo           | RockAlbums   | ArtistName    | dbo       | dbo       | UPDATE      | YES            |
+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+

Detta gav privilegier för ytterligare tre kolumner. Dessa råkar vara från tre olika vyer (databasen har tre vyer med ett ArtistName). kolumn:BluesAlbums , JazzAlbums , och RockAlbums ).

Exempel 5 – Ange endast den länkade servern (inga andra argument)

Här anger jag bara den länkade servern - jag ger inga andra argument. I det här fallet kommer den att returnera alla privilegier för alla kolumner i databasen:

EXEC sp_column_privileges_ex 
  @table_server = 'Homer';

Jag kommer inte att visa resultaten här eftersom det gav över 26 000 rader. De flesta av dessa var från sys tabellschema.

Exempel 6 – Ange ett tabellschema

Följande exempel begränsar resultaten till ett specifikt tabellschema (dbo ).

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo';

Detta gav en mycket mindre resultatuppsättning än föregående exempel. Den är fortfarande ganska stor, så jag kommer inte visa den här.

Exempel 7 – Jokertecken

Du kan också använda jokertecken. Här är ett exempel på hur du använder % jokertecken:

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo',
  @table_catalog = 'Music',   
  @column_name = 'Ar%';

Detta returnerar privilegier för alla kolumner som börjar med Ar .


  1. Komma igång med SQL på Oracle Application Express

  2. Ändra gränsen för Mysql-radstorleken för stor

  3. Topp n procent topp n%

  4. Introduktion till registerunderhåll