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

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

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

Можете да посочите отделна колона или да посочите всички колони от дадена база данни, таблица и т.н.

Синтаксис

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

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 аргументът е единственият задължителен аргумент. Това е името на свързания сървър, от който искате информацията за таблицата.

Другите аргументи са незадължителни и ги обхващам в следващите примери. За повече информация относно тези аргументи вижте документацията на Microsoft.

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

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

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'City', 
  @table_schema = 'Dimension',   
  @table_catalog = 'WideWorldImportersDW',   
  @column_name = 'Region';

Резултат:

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

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

EXEC sp_column_privileges_ex 
  'Homer',
  'City', 
  'Dimension',   
  'WideWorldImportersDW',   
  'Region';

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

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

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

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'City', 
  @table_schema = 'Dimension',
  @column_name = 'Region';

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

(0 rows affected)
Time: 0.321s

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

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

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'Artists', 
  @table_schema = 'dbo',
  @column_name = 'ArtistId';

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

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

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

В този пример указвам само името на таблицата.

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

Резултат:

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

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

Пример 4 – Посочете само името на колоната

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

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',   
  @column_name = 'ArtistName';

Резултати:

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

Това върна привилегии за още три колони. Те са от три различни изгледа (базата данни има три изгледа с ArtistName колона:BluesAlbums , JazzAlbums и RockAlbums ).

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

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

EXEC sp_column_privileges_ex 
  @table_server = 'Homer';

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

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

Следният пример стеснява резултатите до конкретна схема на таблица (dbo ).

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

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

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

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

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo',
  @table_catalog = 'Music',   
  @column_name = 'Ar%';

Това връща привилегии за всички колони, които започват с 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. Проверете типа на параметъра на функцията на дял в SQL Server (T-SQL)

  2. Вземете списък с пощенски акаунти в базата данни в SQL Server (T-SQL)

  3. Бърз и най-добър трик за възстановяване на MDF файлове на SQL Server

  4. Настройка и конфигуриране на репликация на SQL Server

  5. Операцията не е валидна за състоянието на грешката на транзакцията и обхвата на транзакцията