W SQL Server możesz użyć sp_table_privileges_ex
systemowa procedura składowana do zwracania informacji o uprawnieniach do określonej tabeli z określonego połączonego serwera.
Można określić pojedynczą tabelę lub wszystkie tabele z danej bazy danych lub schematu tabeli. Możesz również użyć symboli wieloznacznych, aby określić tabele. Możesz jednak również określić, czy symbole wieloznaczne powinny być interpretowane jako symbole wieloznaczne.
Składnia
Składnia wygląda tak:
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 jest jedynym wymaganym argumentem. To jest nazwa połączonego serwera, z którego chcesz uzyskać informacje o tabeli.
Pozostałe argumenty są opcjonalne i przedstawiono je w poniższych przykładach.
Przykład 1 – Uprawnienia do zwrotu dla określonej tabeli
Ten przykład zwraca uprawnienia dla określonej kolumny, w określonej tabeli, z określonego schematu tabeli, w określonej bazie danych.
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_name = 'City', @table_schema = 'Dimension', @table_catalog = 'WideWorldImportersDW';
Wynik:
+----------------------+---------------+--------------+-----------+-----------+-------------+----------------+ | 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 | +----------------------+---------------+--------------+-----------+-----------+-------------+----------------+
Można to również wykonać w ten sposób:
EXEC sp_table_privileges_ex 'Homer', 'City', 'Dimension', 'WideWorldImportersDW';
Przykład 2 – Korzystanie z domyślnej bazy danych
Jeśli nie podasz @table_catalog
argument (w celu określenia bazy danych), zostanie użyta domyślna baza danych dla połączonego serwera.
Jeśli usunę @table_catalog
argument z poprzedniego przykładu:
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_name = 'City', @table_schema = 'Dimension';
Otrzymuję następujący wynik:
(0 rows affected) Time: 0.311s
Dzieje się tak, ponieważ WideWorldImportersDW
baza danych nie jest domyślną bazą danych dla połączonego serwera. W tym przypadku, kiedy stworzyłem połączony serwer, użyłem @catalog = 'Music'
aby określić, że baza danych o nazwie Muzyka będzie domyślną bazą danych dla tego połączonego serwera.
Więc jeśli określę kolumnę, która akurat znajduje się w domyślnej bazie danych, otrzymam wyniki:
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_name = 'Artists';
Otrzymuję następujący wynik:
+-------------+---------------+--------------+-----------+-----------+-------------+----------------+ | 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 | +-------------+---------------+--------------+-----------+-----------+-------------+----------------+
Zauważ, że nie określiłem schematu tabeli w tym przykładzie, ponieważ jest to opcjonalne.
Przykład 3 – Określ tylko nazwę schematu tabeli
W tym przykładzie podaję tylko nazwę schematu (oczywiście również serwer).
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_schema = 'dbo';
To zwraca 35 wierszy w moim systemie. Obejmuje to 4 tabele i 3 widoki.
Przykład 4 – Określ tylko serwer połączony (bez innych argumentów)
Tutaj podaję tylko linkowany serwer – nie podaję żadnych innych argumentów. W takim przypadku zwróci wszystkie uprawnienia dla wszystkich kolumn w bazie danych:
EXEC sp_table_privileges_ex @table_server = 'Homer';
Nie będę wyświetlać wyników tutaj, ponieważ zwrócił ponad 3000 wierszy. Większość z nich pochodziła z sys
schemat tabeli.
Przykład 5 – Znaki wieloznaczne
Możesz także użyć symboli wieloznacznych. Oto przykład użycia %
znak wieloznaczny:
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_name = 'Ar%';
Wynik:
+-------------+---------------+--------------+-----------+-----------+-------------+----------------+ | 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 | +-------------+---------------+--------------+-----------+-----------+-------------+----------------+
Zwraca to uprawnienia dla wszystkich tabel, które zaczynają się od Ar
.
Możesz jednak również użyć @fUsePattern
argument określający, czy symbole wieloznaczne powinny być interpretowane jako symbole wieloznaczne. Domyślna wartość to 1
, co oznacza, że należy je interpretować jako symbole wieloznaczne. Wartość 0
określa, że nie powinny być interpretowane jako symbole wieloznaczne.
Oto, co się stanie, jeśli dodam @fUsePattern = 0
do poprzedniego przykładu:
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_name = 'Ar%', @fUsePattern = 0;
Wynik:
(0 rows affected) Time: 0.318s
A oto, co się stanie, jeśli ustawię go na 1
:
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_name = 'Ar%', @fUsePattern = 1;
Wynik:
+-------------+---------------+--------------+-----------+-----------+-------------+----------------+ | 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 | +-------------+---------------+--------------+-----------+-----------+-------------+----------------+