sql >> Database >  >> RDS >> Sqlserver

Kolomrechten retourneren van een gekoppelde server in SQL Server (T-SQL-voorbeelden)

In SQL Server kunt u de sp_column_privileges_ex . gebruiken door het systeem opgeslagen procedure om kolomrechten voor de kolommen van een opgegeven gekoppelde server te retourneren.

U kunt een individuele kolom specificeren, of u kunt alle kolommen van een bepaalde database, tabel, enz. specificeren.

Syntaxis

De syntaxis gaat als volgt:

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

De @table_server argument is het enige vereiste argument. Dit is de naam van de gekoppelde server waarvan u de tabelinformatie wilt hebben.

De andere argumenten zijn optioneel en ik behandel ze in de volgende voorbeelden. Zie de Microsoft-documentatie voor meer informatie over deze argumenten.

Voorbeeld 1 – Rechten teruggeven voor een specifieke kolom

In het volgende voorbeeld worden privileges geretourneerd voor een specifieke kolom, in een specifieke tabel, uit een specifiek tabelschema, in een specifieke database.

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

Resultaat:

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

Dit kan ook als volgt worden uitgevoerd:

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

Voorbeeld 2 – De standaarddatabase gebruiken

Als u de @table_catalog . niet opgeeft argument (om de database te specificeren), wordt de standaarddatabase voor de gekoppelde server gebruikt.

Als ik de @table_catalog . verwijder argument uit het vorige voorbeeld:

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

Ik krijg het volgende resultaat:

(0 rows affected)
Time: 0.321s

Dit komt omdat de WideWorldImportersDW database is niet de standaarddatabase voor de gekoppelde server. In dit geval, toen ik de gekoppelde server maakte, gebruikte ik @catalog = 'Music' om aan te geven dat de database met de naam Muziek de standaarddatabase zou zijn voor deze gekoppelde server.

Dus als ik een kolom specificeer die toevallig in de standaarddatabase staat, krijg ik resultaten:

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

Ik krijg het volgende resultaat:

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

Voorbeeld 3 – Specificeer alleen een tabel

In dit voorbeeld geef ik alleen de tabelnaam op.

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

Resultaat:

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

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

Voorbeeld 4 – Geef alleen de kolomnaam op

In dit voorbeeld geef ik alleen de kolomnaam op (uiteraard ook de server).

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

Resultaten:

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

Dit leverde privileges op voor nog drie kolommen. Deze komen toevallig uit drie verschillende weergaven (de database heeft drie weergaven met een ArtistName kolom:BluesAlbums , JazzAlbums , en RockAlbums ).

Voorbeeld 5 – Specificeer alleen de gekoppelde server (geen andere argumenten)

Hier specificeer ik alleen de gekoppelde server - ik geef geen andere argumenten. In dit geval zal het alle privileges voor alle kolommen in de database teruggeven:

EXEC sp_column_privileges_ex 
  @table_server = 'Homer';

Ik zal de resultaten hier niet weergeven omdat het meer dan 26.000 rijen heeft geretourneerd. De meeste hiervan waren afkomstig uit de sys tabelschema.

Voorbeeld 6 – Specificeer een tabelschema

In het volgende voorbeeld worden de resultaten beperkt tot een specifiek tabelschema (dbo ).

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

Dit leverde een veel kleinere resultatenset op dan het vorige voorbeeld. Het is nog steeds vrij groot, dus ik zal het hier niet weergeven.

Voorbeeld 7 – Jokertekens

U kunt ook jokertekens gebruiken. Hier is een voorbeeld van het gebruik van de % jokerteken:

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

Dit levert privileges op voor alle kolommen die beginnen met Ar .


  1. PostgreSQL-query wordt sneller uitgevoerd met indexscan, maar engine kiest hash-join

  2. Verbinding maken met MySQL met Microsoft .NET

  3. Heroku Postgres:Te veel verbindingen. Hoe vernietig ik deze verbindingen?

  4. Hoe OCTET_LENGTH() werkt in MariaDB