DENY (オブジェクトの権限の拒否) (Transact-SQL)

セキュリティ保護可能なリソースの OBJECT クラスのメンバに対する権限を拒否します。OBJECT クラスのメンバは、テーブル、ビュー、テーブル値関数、ストアド プロシージャ、拡張ストアド プロシージャ、スカラ関数、集計関数、サービス キュー、およびシノニムです。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

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 は permissions 句内、またはセキュリティ保護可能なリソースの名前の後に指定できます。

    注記注意

    テーブル レベルの DENY ステートメントは列レベルの GRANT ステートメントよりも優先されません。この動作は権限の階層内で一貫していませんが、旧バージョンとの互換性のために保持されています。

  • 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 句を使用する場合、指定されるプリンシパルは、権限が拒否されるオブジェクトを所有している必要があります。

A. テーブルの SELECT 権限を拒否する

次の例では、AdventureWorks データベースのテーブル Person.Address の SELECT 権限を、ユーザー RosaQdM に対して拒否します。

USE AdventureWorks;
DENY SELECT ON OBJECT::Person.Address TO RosaQdM;
GO

B. ストアド プロシージャの EXECUTE 権限を拒否する

次の例では、ストアド プロシージャ HumanResources.uspUpdateEmployeeHireInfo の EXECUTE 権限を、アプリケーション ロール Recruiting11 に対して拒否します。

USE AdventureWorks;
DENY EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeeHireInfo
    TO Recruiting11;
GO 

C. CASCADE を指定してビューの REFERENCES 権限を拒否する

次の例では、ビュー HumanResources.vEmployee 内の列 EmployeeID の REFERENCES 権限を、ユーザー Wanida に対して拒否します。ここでは CASCADE を使用します。

USE AdventureWorks;
DENY REFERENCES (EmployeeID) ON OBJECT::HumanResources.vEmployee 
    TO Wanida CASCADE;
GO

変更履歴

変更内容

VIEW CHANGE TRACKING の暗黙権限を修正しました。