SQL Serverでは、sp_column_privileges
を使用できます。 現在の環境で特定のテーブルの列特権情報を返すシステムストアドプロシージャ。
ストアドプロシージャを実行するときに引数としてテーブル名を指定すると、そのテーブルの列権限が返されます。必要に応じて、テーブルの所有者、テーブルの修飾子、列名を指定することもできます。
構文
構文は次のようになります:
sp_column_privileges [ @table_name = ] 'table_name' [ , [ @table_owner = ] 'table_owner' ] [ , [ @table_qualifier = ] 'table_qualifier' ] [ , [ @column_name = ] 'column' ]
@table_name
引数は唯一の必須の引数です。これは、列の権限が必要なテーブルの名前です。
例1-特定の列の権限を返す
この例では、考えられるすべての引数を使用しています。特定のデータベース内の特定のテーブル所有者から、特定のテーブル内の特定の列に対する特権を返します。
EXEC sp_column_privileges @table_name = 'Cities', @table_owner = 'Application', @table_qualifier = 'WideWorldImporters', @column_name = 'Location';
結果:
+--------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | COLUMN_NAME | GRANTOR | GRANTEE | PRIVILEGE | IS_GRANTABLE | |--------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------| | WideWorldImporters | Application | Cities | Location | dbo | dbo | INSERT | YES | | WideWorldImporters | Application | Cities | Location | dbo | dbo | REFERENCES | YES | | WideWorldImporters | Application | Cities | Location | dbo | dbo | SELECT | YES | | WideWorldImporters | Application | Cities | Location | dbo | dbo | UPDATE | YES | +--------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
これを行うためのより簡潔な方法は次のとおりです。
sp_column_privileges 'Cities', 'Application', 'WideWorldImporters', 'Location';
同じ結果が返されます。
例2–テーブルのみを指定する
この例では、別のデータベースに切り替えて、テーブル名のみを指定します。
USE Music; EXEC sp_column_privileges @table_name = 'Artists';
結果:
+-------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | TABLE_QUALIFIER | TABLE_OWNER | 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 | +-------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
これにより、指定したテーブルのすべての列の権限が返されます。
正しいデータベースに存在する必要があることに注意してください。前の例を別のデータベースで再実行すると、結果が得られません。
USE WideWorldImporters; EXEC sp_column_privileges @table_name = 'Artists';
結果:
(0 rows affected)
例3–テーブル修飾子について
@table_qualifier
を提供する場合 引数、それは現在のデータベースと同じでなければなりません。そうでない場合は、おそらくエラーメッセージ15250が発生します。
USE Music; EXEC sp_column_privileges @table_name = 'Artists', @table_qualifier = 'WideWorldImporters';
結果:
Msg 15250, Level 16, State 1, Procedure sp_column_privileges, Line 19 The database name component of the object qualifier must be the name of the current database.