GRANT (オブジェクトの権限の許可) (Transact-SQL)

適用対象: SQL Server (サポートされているすべてのバージョン) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

テーブル、ビュー、テーブル値関数、ストアド プロシージャ、拡張ストアド プロシージャ、スカラー関数、集計関数、サービス キュー、またはシノニムに対する権限を許可します。

Topic link iconTransact-SQL 構文表記規則

構文

GRANT <permission> [ ,...n ] ON   
    [ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]  
    TO <database_principal> [ ,...n ]   
    [ WITH GRANT OPTION ]  
    [ 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  

Note

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

引数

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 ステートメントよりも優先されません。 この動作は権限の階層内で一貫していませんが、旧バージョンとの互換性のために保持されています。

ON [ OBJECT :: ] [ schema_name ] . object_name
権限を許可するオブジェクトを指定します。 OBJECT 句は、schema_name を指定する場合は省略可能です。 OBJECT 句を使用する場合は、スコープ修飾子 (::) が必要です。 schema_name が指定されていない場合、既定のスキーマが使用されます。 schema_name が指定されている場合、スキーマのスコープ修飾子 (.) が必要です。

TO <database_principal>
権限を許可するプリンシパルを指定します。

WITH GRANT OPTION
権限が許可されたプリンシパルが、この権限を他のプリンシパルにも許可できることを示します。

AS このクエリを実行するプリンシパルが権限を許可する権利の派生元のプリンシパルを指定します。

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
対応するサーバー レベルのプリンシパルがないデータベース ユーザーを指定します。

解説

重要

権限許可対象ユーザーは、ALTER 権限と REFERENCE 権限を組み合わせて使用することで、データを表示したり、許可されていない関数を実行できる場合があります。 次に例を示します。テーブルの ALTER 権限と関数の REFERENCE 権限を持つユーザーは、関数を介した計算列を作成して実行できます。 この場合、ユーザーには計算列の SELECT 権限も必要です。

オブジェクトに関する情報は、各種カタログ ビューに表示されます。 詳しくは、オブジェクト カタログ ビュー (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

アクセス許可

権限の許可者 (または AS オプションで指定されたプリンシパル) は、GRANT OPTION によって与えられた権限を保持しているか、権限が暗黙的に与えられる上位の権限を保持している必要があります。

AS オプションを使用している場合は、次の追加要件があります。

AS 必要な追加権限
データベース ユーザー ユーザーに対する IMPERSONATE 権限、db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。
Windows ログインにマップされているデータベース ユーザー ユーザーに対する IMPERSONATE 権限、db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。
Windows グループにマップされているデータベース ユーザー Windows グループのメンバーシップ、db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。
証明書にマップされているデータベース ユーザー db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。
非対称キーにマップされているデータベース ユーザー db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。
サーバー プリンシパルにマップされていないデータベース ユーザー ユーザーに対する IMPERSONATE 権限、db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。
データベース ロール ロールに対する ALTER 権限、db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。
アプリケーション ロール ロールに対する ALTER 権限、db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。

A. テーブルの SELECT 権限を許可する

次の例では、AdventureWorks2012 データベース内にある Person.Address テーブルでの SELECT 権限を、ユーザー RosaQdM に対して許可します。

GRANT SELECT ON OBJECT::Person.Address TO RosaQdM;  
GO  

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

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

USE AdventureWorks2012;   
GRANT EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeeHireInfo  
    TO Recruiting11;  
GO   

C. GRANT OPTION を指定してビューの REFERENCES 権限を許可する

次の例では、GRANT OPTION を指定して、ビュー HumanResources.vEmployee にある列 BusinessEntityID での REFERENCES 権限を、ユーザー Wanida に対して許可します。

GRANT REFERENCES (BusinessEntityID) ON OBJECT::HumanResources.vEmployee   
    TO Wanida WITH GRANT OPTION;  
GO  

D. OBJECT 句を使用せずにテーブルの SELECT 権限を許可する

次の例では、AdventureWorks2012 データベース内にある Person.Address テーブルでの SELECT 権限を、ユーザー RosaQdM に対して許可します。

GRANT SELECT ON Person.Address TO RosaQdM;  
GO  

E. テーブルの SELECT 権限をドメイン アカウントに許可する

次の例では、AdventureWorks2012 データベース内にある Person.Address テーブルでの SELECT 権限を、ユーザー AdventureWorks2012\RosaQdM に対して許可します。

GRANT SELECT ON Person.Address TO [AdventureWorks2012\RosaQdM];  
GO  

F. プロシージャの EXECUTE 権限をロールに許可する

次の例では、ロールを作成し、AdventureWorks2012 データベースのプロシージャ uspGetBillOfMaterialsEXECUTE 権限をそのロールに対して許可します。

CREATE ROLE newrole ;  
GRANT EXECUTE ON dbo.uspGetBillOfMaterials TO newrole ;  
GO  

参照

DENY (オブジェクトの権限の拒否) (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)