В SQL Server можете да използвате sp_column_privileges
системна съхранена процедура за връщане на информация за привилегии на колона за дадена таблица в текущата среда.
Предоставете името на таблицата като аргумент при изпълнение на съхранената процедура и привилегиите на колоната ще бъдат върнати за тази таблица. Можете също да посочите собственика на таблицата, квалификатора на таблицата и/или името на колоната, ако е необходимо.
Синтаксис
Синтаксисът е така:
sp_column_privileges [ @table_name =] 'table_name' [ , [ @table_owner =] 'table_owner' ] [ , [ @table_qualifier =] 'table_qualifier' ] [ , [ @column_name =] 'колона' ]
@table_name
аргументът е единственият задължителен аргумент. Това е името на таблицата, от която искате привилегиите на колоните.Пример 1 – връщане на привилегии за конкретна колона
Този пример използва всички възможни аргументи. Той връща привилегии за конкретна колона, в конкретна таблица, от конкретен собственик на таблица, в конкретна база данни.
EXEC sp_column_privileges @table_name ='Градове', @table_owner ='Приложение', @table_qualifier ='WideWorldImporters', @column_name ='Местоположение';Резултат:
+--------------------+--------------+-------- -----+--------------+-----------+----------+----- ---------+----------------+| TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | COLUMN_NAME | КОНДЕНТЪТ | ПОЛУЧАВАТЕЛ | ПРИВИЛЕГИЯ | МОЖЕ ДА СЕ ||-------------------+--------------+---------- ----+--------------+-----------+-----------+----- --------+----------------|| WideWorldImporters | Приложение | Градове | Местоположение | dbo | dbo | ВМЕСТЕ | ДА || WideWorldImporters | Приложение | Градове | Местоположение | dbo | dbo | ЛИТЕРАТУРА | ДА || WideWorldImporters | Приложение | Градове | Местоположение | dbo | dbo | ИЗБЕРЕТЕ | ДА || WideWorldImporters | Приложение | Градове | Местоположение | dbo | dbo | АКТУАЛИЗИРАНЕ | ДА |+-------------------+--------------+---------- ----+--------------+-----------+-----------+----- --------+----------------+Ето един по-сбит начин да го направите:
sp_column_privileges 'Градове', 'Приложение', 'WideWorldImporters', 'Местоположение';Това връща същите резултати.
Пример 2 – Посочете само таблица
В този пример преминавам към друга база данни и посочвам само името на таблицата.
ИЗПОЛЗВАЙТЕ музика;EXEC sp_column_privileges @table_name ='Изпълнители';Резултат:
+------------------+--------------+---------- ----+--------------+-----------+-----------+----- --------+----------------+| TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | COLUMN_NAME | КОНДЕНТЪТ | ПОЛУЧАВАТЕЛ | ПРИВИЛЕГИЯ | МОЖЕ ДА СЕ ||-------------------+--------------+----------- ---+--------------+-----------+-----------+------ -------+----------------|| Музика | dbo | Художници | ActiveFrom | dbo | dbo | ВМЕСТЕ | ДА || Музика | dbo | Художници | ActiveFrom | dbo | dbo | ЛИТЕРАТУРА | ДА || Музика | dbo | Художници | ActiveFrom | dbo | dbo | ИЗБЕРЕТЕ | ДА || Музика | dbo | Художници | ActiveFrom | dbo | dbo | АКТУАЛИЗИРАНЕ | ДА || Музика | dbo | Художници | ArtistId | dbo | dbo | ВМЕСТЕ | ДА || Музика | dbo | Художници | ArtistId | dbo | dbo | ЛИТЕРАТУРА | ДА || Музика | dbo | Художници | ArtistId | dbo | dbo | ИЗБЕРЕТЕ | ДА || Музика | dbo | Художници | ArtistId | dbo | dbo | АКТУАЛИЗИРАНЕ | ДА || Музика | dbo | Художници | Име на изпълнител | dbo | dbo | ВМЕСТЕ | ДА || Музика | dbo | Художници | Име на изпълнител | dbo | dbo | ЛИТЕРАТУРА | ДА || Музика | dbo | Художници | Име на изпълнител | dbo | dbo | ИЗБЕРЕТЕ | ДА || Музика | dbo | Художници | Име на изпълнител | dbo | dbo | АКТУАЛИЗИРАНЕ | ДА |+-------------------+--------------+----------- ---+--------------+-----------+-----------+------ -------+----------------+Това връща привилегиите за всички колони в посочената таблица.
Имайте предвид, че трябва да сте в правилната база данни. Ако стартирам отново предишния пример в друга база данни, няма да получа резултати.
ИЗПОЛЗВАЙТЕ WideWorldImporters;EXEC sp_column_privileges @table_name ='Изпълнители';Резултат:
(0 засегнати реда)Пример 3 – Относно квалификатора на таблица
Ако предоставите
@table_qualifier
аргумент, той трябва да е същият като текущата база данни. Ако не е, вероятно ще получите съобщение за грешка 15250.ИЗПОЛЗВАЙТЕ музика;EXEC sp_column_privileges @table_name ='Изпълнители', @table_qualifier ='WideWorldImporters';Резултати:
Съобщение 15250, ниво 16, състояние 1, процедура sp_column_privileges, ред 19. Компонентът на името на базата данни на квалификатора на обекта трябва да бъде името на текущата база данни.