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