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
が原因です。 databaseは、リンクサーバーのデフォルトデータベースではありません。この場合、リンクサーバーを作成するときに、@catalog = 'Music'
を使用しました。 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 | +-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
これにより、さらに3つの列の特権が返されました。これらはたまたま3つの異なるビューからのものです(データベースにはArtistName
を持つ3つのビューがあります 列: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
で始まるすべての列の権限が返されます 。