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
.