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

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

    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つのビューがあります 列:BluesAlbumsJazzAlbums 、および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で始まるすべての列の権限が返されます 。


    1. MySQLの日付形式指定子のリスト

    2. 主キーにignore_dup_keyをオンに設定できますか?

    3. クエリによって返された行ごとにストアドプロシージャを1回実行するにはどうすればよいですか?

    4. 1つのステートメントでシーケンスから複数のNEXTVALを照会します