sql >> データベース >  >> RDS >> Sqlserver

SQL Serverのリンクサーバーからテーブル権限を返す(T-SQLの例)

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

    1. varcharまたはintの主キーを使用してテーブルを設計する必要がありますか?

    2. SQLキーワードのように見えるSQL列名を処理するにはどうすればよいですか?

    3. MySQLiクエリのエラーを表示するにはどうすればよいですか?

    4. SQLiteで重複する行を削除する2つの方法