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

Returner tabelprivilegier fra en sammenkædet server i SQL Server (T-SQL-eksempler)

I SQL Server kan du bruge sp_table_privileges_ex systemlagret procedure for at returnere privilegieoplysninger om en specificeret tabel fra en specificeret forbundet server.

Du kan angive en individuel tabel, eller du kan angive alle tabeller fra en given database eller tabelskema. Du kan også bruge jokertegn til at angive tabellen/tabellerne. Du kan dog også angive, om jokertegnene skal fortolkes som jokertegn.

Syntaks

Syntaksen ser sådan ud:

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

@table_server argument er det eneste nødvendige argument. Dette er navnet på den sammenkædede server, som du vil have tabeloplysningerne fra.

De andre argumenter er valgfrie, og de er demonstreret i de følgende eksempler.

Eksempel 1 – Returneringsrettigheder for en specifik tabel

Dette eksempel returnerer privilegier for en specifik kolonne, i en specifik tabel, fra et specifikt tabelskema, i en specifik database.

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

Resultat:

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

Dette kunne også udføres sådan her:

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

Eksempel 2 – Brug af standarddatabasen

Hvis du ikke angiver @table_catalog argument (for at specificere databasen), vil standarddatabasen for den sammenkædede server blive brugt.

Hvis jeg fjerner @table_catalog argument fra det forrige eksempel:

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

Jeg får følgende resultat:

(0 rows affected)
Time: 0.311s

Dette skyldes, at WideWorldImportersDW databasen er ikke standarddatabasen for den sammenkædede server. I dette tilfælde brugte jeg @catalog = 'Music', da jeg oprettede den linkede server for at angive, at databasen kaldet Musik ville være standarddatabasen for denne linkede server.

Så hvis jeg angiver en kolonne, der tilfældigvis er i standarddatabasen, får jeg resultater:

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

Jeg får følgende resultat:

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

Bemærk, at jeg ikke specificerede tabelskemaet i dette eksempel, da det er valgfrit.

Eksempel 3 – Angiv kun tabelskemanavnet

I dette eksempel angiver jeg kun skemanavnet (også serveren naturligvis).

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

Det returnerer 35 rækker på mit system. Dette dækker 4 borde og 3 visninger.

Eksempel 4 – Angiv kun den sammenkædede server (ingen andre argumenter)

Her angiver jeg kun den linkede server - jeg giver ikke andre argumenter. I dette tilfælde vil det returnere alle privilegier for alle kolonner i databasen:

EXEC sp_table_privileges_ex 
  @table_server = 'Homer';

Jeg vil ikke vise resultaterne her, fordi det returnerede over 3.000 rækker. De fleste af disse var fra sys tabelskema.

Eksempel 5 – Jokertegn

Du kan også bruge jokertegn. Her er et eksempel på brug af % jokertegn:

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

Resultat:

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

Dette returnerer privilegier for alle tabeller, der begynder med Ar .

Du kan dog også bruge @fUsePattern argument for at bestemme, om jokertegn skal fortolkes som jokertegn eller ej. Standardværdien er 1 , hvilket betyder, at de skal tolkes som jokertegn. En værdi på 0 angiver, at de ikke skal fortolkes som jokertegn.

Her er, hvad der sker, hvis jeg tilføjer @fUsePattern = 0 til det forrige eksempel:

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

Resultat:

(0 rows affected)
Time: 0.318s

Og her er, hvad der sker, hvis jeg indstiller det til 1 :

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

Resultat:

+-------------+---------------+--------------+-----------+-----------+-------------+----------------+
| 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. PHP indlæser ikke php_pgsql.dll på Windows

  2. SQL SELECT OG Operatør

  3. Konfiguration af Pentaho Data Integration til at bruge Oracle Wallet til Oracle Cloud

  4. Returner alle fremmednøgler &CHECK-begrænsninger i en SQL Server-database (T-SQL-eksempler)