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
が原因です。 databaseは、リンクサーバーのデフォルトデータベースではありません。この場合、リンクサーバーを作成するときに、@catalog = 'Music'
を使用しました。 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';
3,000行を超えたため、ここでは結果を表示しません。これらのほとんどは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 | +-------------+---------------+--------------+-----------+-----------+-------------+----------------+