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

T-SQLを使用してSQLServerのテーブルの列権限を取得します:sp_column_privileges

    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.
    

    1. WHEREIN条件が文字列値を受け入れない

    2. iPerfを使用したネットワーク負荷テスト

    3. 接続されているユーザーをOracleデータベースにドロップする

    4. JDBC ResultSetは、テーブルエイリアスを持つ列を取得します