W SQL Server możesz użyć sp_column_privileges_ex
systemowa procedura składowana w celu zwrócenia uprawnień do kolumn dla kolumn z określonego serwera połączonego.
Możesz określić pojedynczą kolumnę lub możesz określić wszystkie kolumny z danej bazy danych, tabeli itp.
Składnia
Składnia wygląda tak:
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 jest jedynym wymaganym argumentem. To jest nazwa połączonego serwera, z którego chcesz uzyskać informacje o tabeli.
Pozostałe argumenty są opcjonalne i opisuję je w poniższych przykładach. Więcej informacji na temat tych argumentów można znaleźć w dokumentacji firmy Microsoft.
Przykład 1 – Uprawnienia zwrotu dla określonej kolumny
Poniższy przykład zwraca uprawnienia dla określonej kolumny, w określonej tabeli, z określonego schematu tabeli, w określonej bazie danych.
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_name = 'City', @table_schema = 'Dimension', @table_catalog = 'WideWorldImportersDW', @column_name = 'Region';
Wynik:
+----------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | 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 | +----------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
Można to również wykonać w ten sposób:
EXEC sp_column_privileges_ex 'Homer', 'City', 'Dimension', 'WideWorldImportersDW', 'Region';
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_column_privileges_ex @table_server = 'Homer', @table_name = 'City', @table_schema = 'Dimension', @column_name = 'Region';
Otrzymuję następujący wynik:
(0 rows affected) Time: 0.321s
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_column_privileges_ex @table_server = 'Homer', @table_name = 'Artists', @table_schema = 'dbo', @column_name = 'ArtistId';
Otrzymuję następujący wynik:
+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | 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 | +-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
Przykład 3 – Określ tylko tabelę
W tym przykładzie podaję tylko nazwę tabeli.
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_name = 'Artists';
Wynik:
+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | 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 | +-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
Zwraca to uprawnienia dla wszystkich kolumn w określonej tabeli.
Przykład 4 – Określ tylko nazwę kolumny
W tym przykładzie podaję tylko nazwę kolumny (oczywiście również serwer).
EXEC sp_column_privileges_ex @table_server = 'Homer', @column_name = 'ArtistName';
Wyniki:
+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | 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 | +-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
Zwróciło to przywileje dla trzech kolejnych kolumn. Pochodzą one z trzech różnych widoków (baza danych ma trzy widoki z ArtistName
kolumna:BluesAlbums
, JazzAlbums
i RockAlbums
).
Przykład 5 – 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_column_privileges_ex @table_server = 'Homer';
Nie będę wyświetlać wyników tutaj, ponieważ zwrócił ponad 26 000 wierszy. Większość z nich pochodziła z sys
schemat tabeli.
Przykład 6 – Określ schemat tabeli
Poniższy przykład zawęża wyniki do określonego schematu tabeli (dbo
).
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_schema = 'dbo';
Zwróciło to znacznie mniejszy zestaw wyników niż w poprzednim przykładzie. Nadal jest dość duży, więc nie będę go tutaj wyświetlać.
Przykład 7 – Znaki wieloznaczne
Możesz także użyć symboli wieloznacznych. Oto przykład użycia %
znak wieloznaczny:
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'Ar%';
Zwraca to uprawnienia dla wszystkich kolumn zaczynających się od Ar
.