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

Zwracanie uprawnień do tabeli z serwera połączonego w programie SQL Server (przykłady T-SQL)

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak usunąć wiodące i końcowe znaki w SQL Server

  2. Czy mogę ustawić domyślny schemat dla procedury składowanej?

  3. Typowe wpadki serwera SQL

  4. Jak wyświetlić listę dostępnych wystąpień SQL Server przy użyciu SMO w C#?

  5. Obliczanie liczby pełnych miesięcy między dwiema datami w SQL