次の方法で共有


sp_column_privileges (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance

現在の環境の 1 つのテーブルの列特権情報を返します。

Transact-SQL 構文表記規則

構文

sp_column_privileges
    [ @table_name = ] N'table_name'
    [ , [ @table_owner = ] N'table_owner' ]
    [ , [ @table_qualifier = ] N'table_qualifier' ]
    [ , [ @column_name = ] N'column_name' ]
[ ; ]

引数

[ @table_name = ] N'table_name'

カタログ情報を返すために使用されるテーブル。 @table_namesysname で、既定値はありません。 ワイルドカード パターン マッチングはサポートされていません。

[ @table_owner = ] N'table_owner'

カタログ情報を返すために使用されるテーブルの所有者。 @table_ownersysname で、既定値は NULL です。 ワイルドカード パターン マッチングはサポートされていません。 @table_ownerが指定されていない場合は、基になるデータベース管理システム (DBMS) の既定のテーブル可視性ルールが適用されます。

指定した名前のテーブルを現在のユーザーが所有している場合は、そのテーブルの列が返されます。 @table_ownerが指定されておらず、現在のユーザーが指定した@table_nameを持つテーブルを所有していない場合、sp_column権限は、データベース所有者が所有する指定した@table_nameを持つテーブルを検索します。 存在する場合は、そのテーブルの列が返されます。

[ @table_qualifier = ] N'table_qualifier'

テーブル修飾子の名前。 @table_qualifiersysname で、既定値は NULL です。 さまざまな DBMS 製品では、テーブルの 3 部構成の名前付け (<qualifier>.<owner>.<name>) がサポートされています。 SQL Server では、この列はデータベース名を表します。 一部の製品では、テーブルのデータベース環境のサーバー名を表します。

[ @column_name = ] N'column_name'

カタログ情報の列が 1 つだけ取得されている場合に使用される 1 つの列。 @column_namenvarchar(384) で、既定値は NULL です。 @column_nameが指定されていない場合は、すべての列が返されます。 SQL Server では、 @column_name は、 sys.columns テーブルに記載されている列名を表します。 @column_name は、基になる DBMS のワイルドカード 一致パターンを使用してワイルドカード文字を含めることができます。 相互運用性を最大限に高める場合、ゲートウェイ クライアントは ISO 標準パターン マッチング ( %_ ワイルドカード文字) のみを想定する必要があります。

結果セット

sp_column_privileges は ODBC の SQLColumnPrivileges と同じです。 返される結果は、 TABLE_QUALIFIERTABLE_OWNERTABLE_NAMECOLUMN_NAME、および PRIVILEGE順に並べ替えます。

列名 データ型 説明
TABLE_QUALIFIER sysname テーブルの修飾子名です。 このフィールドは NULLできます。
TABLE_OWNER sysname テーブル所有者の名前。 このフィールドには常に値が返されます。
TABLE_NAME sysname テーブル名。 このフィールドには常に値が返されます。
COLUMN_NAME sysname 返される TABLE_NAME の各列の列名。 このフィールドには常に値が返されます。
GRANTOR sysname リストされているGRANTEEに対するこのCOLUMN_NAMEに対するアクセス許可が付与されたデータベース ユーザー名。 SQL Server では、この列は常に TABLE_OWNERと同じです。 このフィールドには常に値が返されます。

GRANTOR列には、GRANT ステートメントの WITH GRANT OPTION 句を使用して、データベース所有者 (TABLE_OWNER) またはデータベース所有者が権限を付与したユーザーを指定できます。
GRANTEE sysname 一覧に示されているGRANTORによって、このCOLUMN_NAMEに対するアクセス許可が付与されたデータベース ユーザー名。 SQL Server では、この列には常に sysusers テーブルのデータベース ユーザーが含まれます。 このフィールドには常に値が返されます。
PRIVILEGE varchar(32) 使用可能な列のアクセス許可の 1 つ。 列のアクセス許可には、次のいずれかの値を指定できます (または、実装が定義されている場合、データ ソースでサポートされるその他の値)。

SELECT = GRANTEE では、列のデータを取得できます。
INSERT = GRANTEE では、( GRANTEEによって) 新しい行がテーブルに挿入されるときに、この列のデータを提供できます。
UPDATE = GRANTEE では、列内の既存のデータを変更できます。
REFERENCES = GRANTEE では、主キー/外部キーリレーションシップの外部テーブル内の列を参照できます。 主キーと外部キーのリレーションシップは、テーブル制約を使用して定義されます。
IS_GRANTABLE varchar(3) GRANTEEが他のユーザーにアクセス許可を付与できるかどうかを示します (多くの場合、"grant with grant" アクセス許可と呼ばれます)。 YESNO、または NULL を指定できます。 不明な値 ( NULL) は、"grant with grant" が適用されないデータ ソースを参照します。

解説

SQL Server では、 GRANT ステートメントでアクセス許可が付与され、 REVOKE ステートメントによって削除されます。

アクセス許可

スキーマに対する SELECT アクセス許可が必要です。

次の例では、特定の列の列特権情報を返します。

USE AdventureWorks2022;
GO

EXEC sp_column_privileges
    @table_name = 'Employee',
    @table_owner = 'HumanResources',
    @table_qualifier = 'AdventureWorks2022',
    @column_name = 'SalariedFlag';