DENY (Transact-SQL)

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL データベース はいAzure SQL Managed Instance はいAzure Synapse Analytics はいParallel Data Warehouse

プリンシパルに対する権限を拒否します。 プリンシパルが、そのグループまたはロールのメンバーシップから権限を継承しないようにします。 DENY は、オブジェクトの所有者または sysadmin 固定サーバー ロールのメンバーに適用されない点を除いて、すべての権限より優先されます。 セキュリティに関する注意 sysadmin 固定サーバー ロールのメンバーとオブジェクトの所有者の権限を拒否することはできません。

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

構文

-- Syntax for SQL Server and Azure SQL Database  
  
-- Simplified syntax for DENY  
DENY   { ALL [ PRIVILEGES ] } 
     | <permission>  [ ( column [ ,...n ] ) ] [ ,...n ]  
    [ ON [ <class> :: ] securable ] 
    TO principal [ ,...n ]   
    [ CASCADE] [ AS principal ]  
[;]

<permission> ::=  
{ see the tables below }  
  
<class> ::=  
{ see the tables below }  
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse  
  
DENY   
    <permission> [ ,...n ]  
    [ ON [ <class_> :: ] securable ]   
    TO principal [ ,...n ]  
    [ CASCADE ]  
[;]  
  
<permission> ::=  
{ see the tables below }  
  
<class> ::=  
{  
      LOGIN  
    | DATABASE  
    | OBJECT  
    | ROLE  
    | SCHEMA  
    | USER  
}  

注意

SQL Server 2014 以前の Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

ALL
このオプションでは、可能な権限がすべて拒否されるわけではありません。 ALL を指定すると、次の権限が拒否されます。

  • セキュリティ保護可能なリソースがデータベースの場合、ALL は BACKUP DATABASE、BACKUP LOG、CREATE DATABASE、CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE RULE、CREATE TABLE、および CREATE VIEW を意味します。

  • セキュリティ保護可能なリソースがスカラー関数の場合、EXECUTE および REFERENCES。

  • セキュリティ保護可能なリソースがテーブル値関数の場合、DELETE、INSERT、REFERENCES、SELECT、UPDATE。

  • セキュリティ保護可能なリソースがストアド プロシージャの場合、EXECUTE。

  • セキュリティ保護可能なリソースがテーブルの場合、ALL は DELETE、INSERT、REFERENCES、SELECT、および UPDATE を意味します。

  • セキュリティ保護可能なリソースがビューの場合、ALL は DELETE、INSERT、REFERENCES、SELECT、および UPDATE を意味します。

注意

DENY ALL 構文は非推奨です。 この機能は、Microsoft SQL Server の将来のバージョンで削除されます。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。代わりに特定の権限を拒否してください。

PRIVILEGES
ISO 準拠のために用意されています。 ALL の動作は変更されません。

permission
権限の名前を指定します。 権限とセキュリティ保護可能なリソースの有効な組み合わせについては、後のトピックを参照してください。

column
権限を拒否するテーブルの列の名前を指定します。 かっこ () で囲む必要があります。

class
権限を拒否するセキュリティ保護可能なリソースのクラスを指定します。 スコープ修飾子 :: が必要です。

securable
権限を拒否するセキュリティ保護可能なリソースを指定します。

TO principal
プリンシパルの名前です。 セキュリティ保護可能なリソースに対する権限を拒否できるプリンシパルは、そのリソースによって異なります。 有効な組み合わせについては、後のセキュリティ保護可能なリソースの各トピックを参照してください。

CASCADE
指定したプリンシパル、およびこのプリンシパルによって権限が許可されている他のすべてのプリンシパルに対しても、同じ権限を拒否することを示します。 GRANT OPTION を使用してプリンシパルに権限が与えられている場合に必要となります。

AS principal
このクエリを実行するプリンシパルが権限を拒否する権利を取得した、元のプリンシパルを指定します。 AS 句は、権限の拒否者として記録されるプリンシパルは、ステートメントを実行しているユーザー以外のプリンシパルでなければならないことを示すために使います。 たとえば、ユーザー Mary の principal_id は 12、ユーザー Raul の principal_id は 15 であるものとします。 Mary が DENY SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul; を実行します。ステートメントは実際にはユーザー 13 (Mary) によって実行されましたが、sys.database_permissions テーブルでは、DENY ステートメントの grantor_prinicpal_id は 15 (Raul) であることが示されます。

このステートメントで AS を使っても、別のユーザーを偽装できることは意味しません。

解説

DENY ステートメントの完全な構文は複雑です。 前の構文ダイアグラムは、構造をわかりやすくするために簡略化されています。 セキュリティ保護可能なリソースに対する権限を拒否するための完全な構文については、後のトピックを参照してください。

GRANT OPTION で権限が付与されたプリンシパルに対して、その権限を拒否するときに CASCADE を指定しないと、DENY は失敗します。

システム ストアド プロシージャ sp_helprotect では、データベース レベルのセキュリティ保護可能なリソースに対する権限をレポートします。

注意事項

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

注意事項

データベースに対する CONTROL 権限を拒否すると、そのデータベースに対する CONNECT 権限が暗黙的に拒否されます。 データベースに対する CONTROL 権限を拒否されたプリンシパルは、そのデータベースに接続できません。

注意事項

CONTROL SERVER 権限を拒否すると、そのサーバーに対する CONNECT SQL 権限が暗黙的に拒否されます。 サーバーに対する CONTROL SERVER 権限が拒否されたプリンシパルは、そのサーバーに接続できません。

アクセス許可

呼び出し元 (または AS オプションで指定されたプリンシパル) は、セキュリティ保護可能なリソースに対する CONTROL 権限、またはセキュリティ保護可能なリソースに対する CONTROL 権限を暗黙的に与える上位の権限を保持している必要があります。 AS オプションを使用する場合、指定されたプリンシパルは、権限が拒否されるセキュリティ保護可能なリソースを所有している必要があります。

固定サーバー ロール sysadmin のメンバーなど、CONTROL SERVER 権限が許可されているユーザーは、サーバー内のセキュリティ保護可能なリソースに対する権限を拒否できます。 db_owner 固定データベース ロールのメンバーなど、データベースに対する CONTROL 権限が許可されているユーザーは、データベース内のセキュリティ保護可能なリソースに対する権限を拒否できます。 スキーマに対する CONTROL 権限が許可されているユーザーは、スキーマ内のオブジェクトに対する権限を拒否できます。 AS 句を使用する場合、指定されるプリンシパルは、権限の拒否対象となるセキュリティ保護可能なリソースを所有している必要があります。

次の表は、セキュリティ保護可能なリソースと、セキュリティ保護可能なリソース固有の構文について説明しているトピックの一覧です。

[セキュリティ保護可能なリソース] 構文
アプリケーション ロール DENY (データベース プリンシパルの権限の拒否) (Transact-SQL)
アセンブリ DENY (アセンブリの権限の拒否) (Transact-SQL)
非対称キー DENY (非対称キーの権限の拒否) (Transact-SQL)
可用性グループ DENY (可用性グループの権限の拒否) (Transact-SQL)
Certificate DENY (証明書の権限の拒否) (Transact-SQL)
コントラクト DENY (Service Broker の権限の拒否) (Transact-SQL)
データベース DENY (データベースの権限の拒否) (Transact-SQL)
データベース スコープ資格情報 DENY (データベース スコープの資格情報の拒否) (Transact-SQL)
エンドポイント DENY (エンドポイントの権限の拒否) (Transact-SQL)
フルテキスト カタログ DENY (フルテキストの権限の拒否) (Transact-SQL)
フルテキスト ストップリスト DENY (フルテキストの権限の拒否) (Transact-SQL)
機能 DENY (オブジェクトの権限の拒否) (Transact-SQL)
ログイン DENY (サーバー プリンシパルの権限の拒否) (Transact-SQL)
メッセージ型 DENY (Service Broker の権限の拒否) (Transact-SQL)
Object DENY (オブジェクトの権限の拒否) (Transact-SQL)
キュー DENY (オブジェクトの権限の拒否) (Transact-SQL)
リモート サービス バインド DENY (Service Broker の権限の拒否) (Transact-SQL)
Role DENY (データベース プリンシパルの権限の拒否) (Transact-SQL)
ルート DENY (Service Broker の権限の拒否) (Transact-SQL)
スキーマ DENY (スキーマ権限の拒否) (Transact-SQL)
検索プロパティ リスト DENY (検索プロパティ リスト権限の拒否) (Transact-SQL)
サーバー DENY (サーバーの権限の拒否) (Transact-SQL)
サービス DENY (Service Broker の権限の拒否) (Transact-SQL)
ストアド プロシージャ DENY (オブジェクトの権限の拒否) (Transact-SQL)
対称キー DENY (対称キーの権限の拒否) (Transact-SQL)
シノニム DENY (オブジェクトの権限の拒否) (Transact-SQL)
システム オブジェクト DENY (システム オブジェクトの権限の拒否) (Transact-SQL)
テーブル DENY (オブジェクトの権限の拒否) (Transact-SQL)
Type DENY (型の権限の拒否) (Transact-SQL)
User DENY (データベース プリンシパルの権限の拒否) (Transact-SQL)
表示 DENY (オブジェクトの権限の拒否) (Transact-SQL)
XML スキーマ コレクション DENY (XML スキーマ コレクションの権限の拒否) (Transact-SQL)

参照

REVOKE (Transact-SQL)
sp_addlogin (Transact-SQL)
sp_adduser (Transact-SQL)
sp_changedbowner (Transact-SQL)
sp_dropuser (Transact-SQL)
sp_helprotect (Transact-SQL)
sp_helpuser (Transact-SQL)