sql >> Database >  >> RDS >> Sqlserver

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

In SQL Server kunt u de sp_table_privileges_ex . gebruiken door het systeem opgeslagen procedure om privilege-informatie over een gespecificeerde tabel van een gespecificeerde gekoppelde server te retourneren.

U kunt een individuele tabel specificeren, of u kunt alle tabellen van een bepaalde database of tabelschema specificeren. U kunt ook jokertekens gebruiken om de tabel(len) te specificeren. U kunt echter ook aangeven of de jokertekens moeten worden geïnterpreteerd als jokertekens.

Syntaxis

De syntaxis gaat als volgt:

sp_table_privileges_ex [ @table_server = ] 'table_server'   
     [ , [ @table_name = ] 'table_name' ]   
     [ , [ @table_schema = ] 'table_schema' ]   
     [ , [ @table_catalog = ] 'table_catalog' ]  
     [ , [@fUsePattern =] 'fUsePattern']

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 worden in de volgende voorbeelden gedemonstreerd.

Voorbeeld 1 – Rechten teruggeven voor een specifieke tafel

Dit voorbeeld retourneert privileges voor een specifieke kolom, in een specifieke tabel, uit een specifiek tabelschema, in een specifieke database.

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'City', 
  @table_schema = 'Dimension', 
  @table_catalog = 'WideWorldImportersDW';

Resultaat:

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

Dit kan ook als volgt worden uitgevoerd:

EXEC sp_table_privileges_ex 
  'Homer',
  'City',
  'Dimension',
  'WideWorldImportersDW';

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_table_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'City', 
  @table_schema = 'Dimension';

Ik krijg het volgende resultaat:

(0 rows affected)
Time: 0.311s

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_table_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'Artists';

Ik krijg het volgende resultaat:

+-------------+---------------+--------------+-----------+-----------+-------------+----------------+
| TABLE_CAT   | TABLE_SCHEM   | TABLE_NAME   | GRANTOR   | GRANTEE   | PRIVILEGE   | IS_GRANTABLE   |
|-------------+---------------+--------------+-----------+-----------+-------------+----------------|
| Music       | dbo           | Artists      | dbo       | dbo       | DELETE      | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | INSERT      | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | REFERENCES  | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | SELECT      | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | UPDATE      | YES            |
+-------------+---------------+--------------+-----------+-----------+-------------+----------------+

Merk op dat ik het tabelschema in dit voorbeeld niet heb gespecificeerd, omdat het optioneel is.

Voorbeeld 3 – Geef alleen de tabelschemanaam op

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

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

Dat levert 35 rijen op mijn systeem op. Dit omvat 4 tabellen en 3 weergaven.

Voorbeeld 4 – 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_table_privileges_ex 
  @table_server = 'Homer';

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

Voorbeeld 5 – Jokertekens

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

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',    
  @table_name = 'Ar%';

Resultaat:

+-------------+---------------+--------------+-----------+-----------+-------------+----------------+
| TABLE_CAT   | TABLE_SCHEM   | TABLE_NAME   | GRANTOR   | GRANTEE   | PRIVILEGE   | IS_GRANTABLE   |
|-------------+---------------+--------------+-----------+-----------+-------------+----------------|
| Music       | dbo           | Artists      | dbo       | dbo       | DELETE      | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | INSERT      | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | REFERENCES  | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | SELECT      | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | UPDATE      | YES            |
+-------------+---------------+--------------+-----------+-----------+-------------+----------------+

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

U kunt echter ook de @fUsePattern . gebruiken argument om te bepalen of jokertekens moeten worden geïnterpreteerd als jokertekens. De standaardwaarde is 1 , wat betekent dat ze moeten worden geïnterpreteerd als jokertekens. Een waarde van 0 geeft aan dat ze niet mogen worden geïnterpreteerd als jokertekens.

Dit gebeurt er als ik @fUsePattern = 0 . toevoeg naar het vorige voorbeeld:

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',    
  @table_name = 'Ar%',
  @fUsePattern = 0;

Resultaat:

(0 rows affected)
Time: 0.318s

En dit is wat er gebeurt als ik het instel op 1 :

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',    
  @table_name = 'Ar%',
  @fUsePattern = 1;

Resultaat:

+-------------+---------------+--------------+-----------+-----------+-------------+----------------+
| TABLE_CAT   | TABLE_SCHEM   | TABLE_NAME   | GRANTOR   | GRANTEE   | PRIVILEGE   | IS_GRANTABLE   |
|-------------+---------------+--------------+-----------+-----------+-------------+----------------|
| Music       | dbo           | Artists      | dbo       | dbo       | DELETE      | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | INSERT      | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | REFERENCES  | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | SELECT      | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | UPDATE      | YES            |
+-------------+---------------+--------------+-----------+-----------+-------------+----------------+

  1. Leer hoe u omgaat met uitzonderingen in PL/SQL

  2. IllegalStateException:database al gesloten (met ViewPager)

  3. Vervolg op Zomervoorstelling Palooza 2013

  4. Queryresultaten retourneren als een door komma's gescheiden lijst in PostgreSQL