DENY (オブジェクトの権限の拒否) (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
セキュリティ保護可能なリソースの OBJECT クラスのメンバーに対する権限を拒否します。 OBJECT クラスのメンバーは、テーブル、ビュー、テーブル値関数、ストアド プロシージャ、拡張ストアド プロシージャ、スカラー関数、集計関数、サービス キュー、およびシノニムです。
構文
DENY <permission> [ ,...n ] ON
[ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]
TO <database_principal> [ ,...n ]
[ CASCADE ]
[ AS <database_principal> ]
<permission> ::=
ALL [ PRIVILEGES ] | permission [ ( column [ ,...n ] ) ]
<database_principal> ::=
Database_user
| Database_role
| Application_role
| Database_user_mapped_to_Windows_User
| Database_user_mapped_to_Windows_Group
| Database_user_mapped_to_certificate
| Database_user_mapped_to_asymmetric_key
| Database_user_with_no_login
引数
permission
スキーマに含まれるオブジェクトで拒否できる権限を指定します。 権限の一覧については、後の「解説」を参照してください。
ALL
ALL を指定しても、可能な権限がすべて拒否されるわけではありません。 ALL を指定すると、指定したオブジェクトに適用されるすべての ANSI-92 権限を拒否することになります。 ALL の意味は、状況に応じて次のようになります。
- スカラー関数の権限: EXECUTE、REFERENCES。
- テーブル値関数の権限: DELETE、INSERT、REFERENCES、SELECT、UPDATE。
- ストアド プロシージャの権限: EXECUTE。
- テーブルの権限: DELETE、INSERT、REFERENCES、SELECT、UPDATE。
- ビューの権限: DELETE、INSERT、REFERENCES、SELECT、UPDATE。
PRIVILEGES
ANSI-92 準拠のために用意されています。 ALL の動作は変更されません。
column
権限を拒否するテーブル、ビュー、またはテーブル値関数内の列の名前を指定します。 かっこ ( ) で囲む必要があります。 列で拒否できるのは、SELECT、REFERENCES、および UPDATE の各権限だけです。 column は permission 句内、またはセキュリティ保護可能なリソースの名前の後に指定できます。
注意事項
テーブル レベルの DENY は列レベルの GRANT ステートメントよりも優先されません。 この動作は権限の階層内で一貫していませんが、旧バージョンとの互換性のために保持されています。 SQL Server では、Common Criteria Compliance Enabled サーバー構成で実行するようにサーバーが構成されている場合、この動作は異なります。 ただし、一般的な方法としてではなく、通常は慎重に使用する必要があります。
ON [ OBJECT :: ] [ schema_name ] . object_name
権限を拒否するオブジェクトを指定します。 OBJECT 句は、schema_name を指定する場合は省略可能です。 OBJECT 句を使用する場合は、スコープ修飾子 ( :: ) が必要です。 schema_name が指定されていない場合、既定のスキーマが使用されます。 schema_name が指定されている場合、スキーマのスコープ修飾子 ( . ) が必要です。
TO <database_principal>
権限を拒否するプリンシパルを指定します。
CASCADE
このプリンシパルによって権限が許可されている他のプリンシパルに対しても、同じ権限を拒否することを示します。
AS <database_principal>
このクエリを実行するプリンシパルが権限を拒否する権利を取得した、元のプリンシパルを指定します。
Database_user
データベース ユーザーを指定します。
Database_role
データベース ロールを指定します。
Application_role
アプリケーション ロールを指定します。
Database_user_mapped_to_Windows_User
Windows ユーザーにマップされているデータベース ユーザーを指定します。
Database_user_mapped_to_Windows_Group
Windows グループにマップされているデータベース ユーザーを指定します。
Database_user_mapped_to_certificate
証明書にマップされているデータベース ユーザーを指定します。
Database_user_mapped_to_asymmetric_key
非対称キーにマップされているデータベース ユーザーを指定します。
Database_user_with_no_login
対応するサーバー レベルのプリンシパルがないデータベース ユーザーを指定します。
解説
オブジェクトに関する情報は、各種カタログ ビューに表示されます。 詳しくは、オブジェクト カタログ ビュー (Transact-SQL) に関する記事を参照してください。
オブジェクトは、スキーマ レベルのセキュリティ保護可能なリソースで、権限の階層で親となっているスキーマに含まれています。 次の表に、オブジェクトで拒否できる権限のうち最も限定的なものを、それらを暗黙的に含む一般的な権限と共に示します。
オブジェクト権限 | 権限が含まれるオブジェクト権限 | 権限が含まれるスキーマ権限 |
---|---|---|
ALTER | CONTROL | ALTER |
CONTROL | CONTROL | CONTROL |
DELETE | CONTROL | DELETE |
EXECUTE | CONTROL | EXECUTE |
INSERT | CONTROL | INSERT |
RECEIVE | CONTROL | CONTROL |
REFERENCES | CONTROL | REFERENCES |
SELECT | RECEIVE | SELECT |
TAKE OWNERSHIP | CONTROL | CONTROL |
UPDATE | CONTROL | UPDATE |
VIEW CHANGE TRACKING | CONTROL | VIEW CHANGE TRACKING |
VIEW DEFINITION | CONTROL | VIEW DEFINITION |
アクセス許可
オブジェクトに対する CONTROL 権限が必要です。
AS 句を使用する場合、指定されるプリンシパルは、権限が拒否されるオブジェクトを所有している必要があります。
例
以下の例では、AdventureWorks データベースを使います。
A. テーブルの SELECT 権限を拒否する
次の例では、テーブル Person.Address
の SELECT
権限を、ユーザー RosaQdM
に対して拒否します。
DENY SELECT ON OBJECT::Person.Address TO RosaQdM;
GO
B. ストアド プロシージャの EXECUTE 権限を拒否する
次の例では、ストアド プロシージャ EXECUTE
の HumanResources.uspUpdateEmployeeHireInfo
権限を、アプリケーション ロール Recruiting11
に対して拒否します。
DENY EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeeHireInfo
TO Recruiting11;
GO
C. CASCADE を指定してビューの REFERENCES 権限を拒否する
次の例では、ビュー HumanResources.vEmployee
内の列 BusinessEntityID
の REFERENCES
権限を、ユーザー Wanida
に対して拒否します。ここでは CASCADE
を使用します。
DENY REFERENCES (BusinessEntityID) ON OBJECT::HumanResources.vEmployee
TO Wanida CASCADE;
GO
参照
GRANT オブジェクトのアクセス許可 (Transact-SQL)
REVOKE (オブジェクトの権限の取り消し) (Transact-SQL)
オブジェクト カタログ ビュー (Transact-SQL)
権限 (データベース エンジン)
プリンシパル (データベース エンジン)
セキュリティ保護可能
sys.fn_builtin_permissions (Transact-SQL)
HAS_PERMS_BY_NAME (Transact-SQL)
sys.fn_my_permissions (Transact-SQL)