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

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

V SQL Server můžete použít sp_column_privileges_ex systémová uložená procedura pro vrácení oprávnění sloupců pro sloupce ze zadaného propojeného serveru.

Můžete zadat jednotlivý sloupec nebo můžete zadat všechny sloupce z dané databáze, tabulky atd.

Syntaxe

Syntaxe vypadá takto:

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

@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 budu je pokrývat v následujících příkladech. Další informace o těchto argumentech naleznete v dokumentaci společnosti Microsoft.

Příklad 1 – Návratová oprávnění pro konkrétní sloupec

Následující 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_column_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'City', 
  @table_schema = 'Dimension',   
  @table_catalog = 'WideWorldImportersDW',   
  @column_name = 'Region';

Výsledek:

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

To lze také provést takto:

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

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

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

(0 rows affected)
Time: 0.321s

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_column_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'Artists', 
  @table_schema = 'dbo',
  @column_name = 'ArtistId';

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

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

Příklad 3 – Určení pouze tabulky

V tomto příkladu uvádím pouze název tabulky.

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

Výsledek:

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

Tím se vrátí oprávnění pro všechny sloupce v zadané tabulce.

Příklad 4 – Zadejte pouze název sloupce

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

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

Výsledky:

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

To vrátilo oprávnění pro další tři sloupce. Ty jsou náhodou ze tří různých pohledů (databáze má tři pohledy s ArtistName sloupec:BluesAlbums , JazzAlbums a RockAlbums ).

Příklad 5 – 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_column_privileges_ex 
  @table_server = 'Homer';

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

Příklad 6 – Zadání schématu tabulky

Následující příklad zužuje výsledky na konkrétní schéma tabulky (dbo ).

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

To vrátilo mnohem menší sadu výsledků než předchozí příklad. Je stále poměrně velký, takže jej zde nebudu zobrazovat.

Příklad 7 – Zástupné znaky

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

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

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


  1. Datový model dětské party

  2. Instalace Microsoft SQL Server 2012 Enterprise Edition s aktualizací Service Pack 1

  3. Jak zkontrolovat, zda sloupec existuje, než jej přidáte do existující tabulky v PL/SQL?

  4. Jak získat záznamy náhodně z databáze Oracle?