Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Връщане на привилегии на таблица от свързан сървър в SQL Server (T-SQL примери)

В SQL Server можете да използвате sp_table_privileges_ex системна съхранена процедура за връщане на информация за привилегии за определена таблица от определен свързан сървър.

Можете да посочите отделна таблица или да посочите всички таблици от дадена база данни или схема на таблица. Можете също да използвате заместващи знаци, за да посочите таблицата/ите. Въпреки това, можете също да укажете дали заместващите знаци трябва да се интерпретират като заместващи знаци.

Синтаксис

Синтаксисът е така:

sp_table_privileges_ex [ @table_server = ] 'table_server'   
     [ , [ @table_name = ] 'table_name' ]   
     [ , [ @table_schema = ] 'table_schema' ]   
     [ , [ @table_catalog = ] 'table_catalog' ]  
     [ , [@fUsePattern =] 'fUsePattern']

@table_server аргументът е единственият задължителен аргумент. Това е името на свързания сървър, от който искате информацията за таблицата.

Другите аргументи са незадължителни и са демонстрирани в следващите примери.

Пример 1 – Връщане на привилегии за конкретна таблица

Този пример връща привилегии за конкретна колона, в конкретна таблица, от конкретна схема на таблица, в конкретна база данни.

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'City', 
  @table_schema = 'Dimension', 
  @table_catalog = 'WideWorldImportersDW';

Резултат:

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

Това може да се изпълни и по следния начин:

EXEC sp_table_privileges_ex 
  'Homer',
  'City',
  'Dimension',
  'WideWorldImportersDW';

Пример 2 – Използване на базата данни по подразбиране

Ако не предоставите @table_catalog аргумент (за да посочите базата данни), ще се използва базата данни по подразбиране за свързания сървър.

Ако премахна @table_catalog аргумент от предишния пример:

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'City', 
  @table_schema = 'Dimension';

Получавам следния резултат:

(0 rows affected)
Time: 0.311s

Това е така, защото WideWorldImportersDW базата данни не е базата данни по подразбиране за свързания сървър. В този случай, когато създадох свързания сървър, използвах @catalog = 'Music' за да посочите, че базата данни, наречена Музика, ще бъде базата данни по подразбиране за този свързан сървър.

Така че, ако посоча колона, която се намира в базата данни по подразбиране, ще получа резултати:

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'Artists';

Получавам следния резултат:

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

Забележете, че не съм посочил схемата на таблицата в този пример, тъй като е по избор.

Пример 3 – Посочете само името на схемата на таблица

В този пример посочвам само името на схемата (също и сървъра, очевидно).

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',
  @table_schema = 'dbo';

Това връща 35 реда в моята система. Това обхваща 4 таблици и 3 изгледа.

Пример 4 – Посочете само свързания сървър (без други аргументи)

Тук посочвам само свързания сървър - не предоставям никакви други аргументи. В този случай той ще върне всички привилегии за всички колони в базата данни:

EXEC sp_table_privileges_ex 
  @table_server = 'Homer';

Няма да показвам резултатите тук, защото върна над 3000 реда. Повечето от тях бяха от sys схема на таблицата.

Пример 5 – заместващи знаци

Можете също да използвате заместващи знаци. Ето пример за използване на % заместващ знак:

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',    
  @table_name = 'Ar%';

Резултат:

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

Това връща привилегии за всички таблици, които започват с Ar .

Можете обаче да използвате и @fUsePattern аргумент, за да се определи дали заместващите знаци трябва да се интерпретират като заместващи знаци. Стойността по подразбиране е 1 , което означава, че те трябва да се интерпретират като заместващи знаци. Стойност 0 указва, че те не трябва да се интерпретират като заместващи знаци.

Ето какво се случва, ако добавя @fUsePattern = 0 към предишния пример:

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',    
  @table_name = 'Ar%',
  @fUsePattern = 0;

Резултат:

(0 rows affected)
Time: 0.318s

И ето какво се случва, ако го задам на 1 :

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',    
  @table_name = 'Ar%',
  @fUsePattern = 1;

Резултат:

+-------------+---------------+--------------+-----------+-----------+-------------+----------------+
| 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. Какво е IN логически оператор в SQL Server - SQL Server / TSQL урок, част 122

  2. Как да увеличите автоматично varchar

  3. Как да използвате SQL Server HierarchyID чрез лесни примери

  4. Изберете/Вмъкнете версия на Upsert:има ли модел на проектиране за висок едновременност?

  5. Кои колони обикновено правят добри индекси?