Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zwróć uprawnienia kolumny z serwera połączonego w programie SQL Server (przykłady T-SQL)

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 .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Użyj IDENT_CURRENT(), aby zwrócić bieżącą wartość tożsamości w kolumnie tożsamości w SQL Server

  2. Jak usunąć kolumnę w SQL Server za pomocą T-SQL

  3. Wdrażanie certyfikatu dla szyfrowanego połączenia SQL Server

  4. Usuń dziwne znaki (A z kapeluszem) z kolumny varchar SQL Server

  5. Jak napisać UPDATE SQL z aliasem tabeli w SQL Server 2008?