sql >> Databáze >  >> RDS >> Sqlserver

Vrácení oprávnění tabulky z propojeného serveru v SQL Server (příklady T-SQL)

V SQL Server můžete použít sp_table_privileges_ex systémová uložená procedura pro vrácení informací o oprávněních pro určitou tabulku ze zadaného propojeného serveru.

Můžete zadat jednotlivou tabulku nebo můžete zadat všechny tabulky z dané databáze nebo schématu tabulky. K určení tabulky/tabulek můžete také použít zástupné znaky. Můžete však také určit, zda mají být zástupné znaky interpretovány jako zástupné znaky.

Syntaxe

Syntaxe vypadá takto:

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 je jediný požadovaný argument. Toto je název propojeného serveru, ze kterého chcete informace o tabulce.

Ostatní argumenty jsou volitelné a jsou ukázány v následujících příkladech.

Příklad 1 – Vrácení oprávnění pro konkrétní stůl

Tento příklad vrací oprávnění pro konkrétní sloupec, v konkrétní tabulce, z konkrétního schématu tabulky, v konkrétní databázi.

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

Výsledek:

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

To lze také provést takto:

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

Příklad 2 – Použití výchozí databáze

Pokud neposkytnete @table_catalog argument (pro specifikaci databáze), bude použita výchozí databáze pro propojený server.

Pokud odstraním @table_catalog argument z předchozího příkladu:

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

Dostávám následující výsledek:

(0 rows affected)
Time: 0.311s

Je to proto, že WideWorldImportersDW databáze není výchozí databází pro propojený server. V tomto případě, když jsem vytvořil propojený server, použil jsem @catalog = 'Music' určit, že databáze s názvem Hudba bude výchozí databází pro tento propojený server.

Pokud tedy zadám sloupec, který je náhodou ve výchozí databázi, dostanu výsledky:

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

Dostávám následující výsledek:

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

Všimněte si, že jsem v tomto příkladu neuvedl schéma tabulky, protože je volitelné.

Příklad 3 – Zadejte pouze název schématu tabulky

V tomto příkladu zadávám pouze název schématu (samozřejmě také server).

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

To vrátí 35 řádků v mém systému. To zahrnuje 4 tabulky a 3 pohledy.

Příklad 4 – Zadejte pouze propojený server (žádné další argumenty)

Zde specifikuji pouze propojený server – žádné další argumenty neuvádím. V tomto případě vrátí všechna oprávnění pro všechny sloupce v databázi:

EXEC sp_table_privileges_ex 
  @table_server = 'Homer';

Nebudu zde zobrazovat výsledky, protože to vrátilo více než 3 000 řádků. Většina z nich byla z sys schéma tabulky.

Příklad 5 – Zástupné znaky

Můžete také použít zástupné znaky. Zde je příklad použití % zástupný znak:

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

Výsledek:

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

To vrátí oprávnění pro všechny tabulky, které začínají Ar .

Můžete však také použít @fUsePattern argument k určení, zda mají být zástupné znaky interpretovány jako zástupné znaky. Výchozí hodnota je 1 , což znamená, že by měly být interpretovány jako zástupné znaky. Hodnota 0 určuje, že by neměly být interpretovány jako zástupné znaky.

Zde je to, co se stane, když přidám @fUsePattern = 0 k předchozímu příkladu:

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

Výsledek:

(0 rows affected)
Time: 0.318s

A co se stane, když to nastavím na 1 :

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

Výsledek:

+-------------+---------------+--------------+-----------+-----------+-------------+----------------+
| 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. Přejmenujte cizí klíč v SQL Server pomocí T-SQL

  2. Vrátí sadu záznamů (virtuální tabulku) z funkce

  3. Připojení Genero k SQL Serveru

  4. Jak mohu získat výčet možných hodnot v databázi MySQL?