sql >> Databasteknik >  >> RDS >> Sqlserver

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

I SQL Server kan du använda sp_table_privileges_ex systemlagrad procedur för att returnera behörighetsinformation om en specificerad tabell från en specificerad länkad server.

Du kan ange en enskild tabell, eller så kan du ange alla tabeller från en given databas eller tabellschema. Du kan också använda jokertecken för att specificera tabellen/tabellerna. Men du kan också ange om jokertecken ska tolkas som jokertecken.

Syntax

Syntaxen ser ut så här:

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 ä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 de visas i följande exempel.

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

Det här exemplet returnerar privilegier för en specifik kolumn, i en specifik tabell, från ett specifikt tabellschema, i en specifik databas.

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

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

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

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

Jag får följande resultat:

(0 rows affected)
Time: 0.311s

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

Jag får följande 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            |
+-------------+---------------+--------------+-----------+-----------+-------------+----------------+

Observera att jag inte angav tabellschemat i det här exemplet, eftersom det är valfritt.

Exempel 3 – Ange endast namnet på tabellschemat

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

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

Det returnerar 35 rader på mitt system. Detta omfattar 4 tabeller och 3 vyer.

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

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

Exempel 5 – Jokertecken

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

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

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

Men du kan också använda @fUsePattern argument för att avgöra om jokertecken ska tolkas som jokertecken eller inte. Standardvärdet är 1 , vilket betyder att de ska tolkas som jokertecken. Ett värde på 0 anger att de inte ska tolkas som jokertecken.

Så här händer om jag lägger till @fUsePattern = 0 till föregående exempel:

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

Resultat:

(0 rows affected)
Time: 0.318s

Och här är vad som händer om jag ställer in den på 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. Är det möjligt att framtvinga datakontroll i MySQL med hjälp av reguljära uttryck

  2. Använd COLUMNPROPERTY() för att returnera kolumn- eller parameterinformation i SQL Server

  3. Börja blogga för HTML5 och CSS3

  4. Hur man uppdaterar med inre join i Oracle