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

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

トピック リンク アイコンTransact-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

引数

  • 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>
    権限を許可するプリンシパルを指定します。

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

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

説明

重要な注意事項重要

権限許可対象ユーザーは、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 権限を許可する

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

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

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

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

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

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

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

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

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

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

USE AdventureWorks;
GRANT SELECT ON Person.Address TO RosaQdM;
GO

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

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

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

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

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

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

変更履歴

変更内容

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

例 E と例 F を追加しました。