GRANT (スキーマ権限の許可) (Transact-SQL)GRANT Schema Permissions (Transact-SQL)

適用対象: ○SQL Server (2008 以降) ○Azure SQL Database○Azure SQL Data Warehouse ○Parallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

スキーマの権限を許可します。Grants permissions on a schema.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

GRANT permission  [ ,...n ] ON SCHEMA :: schema_name  
    TO database_principal [ ,...n ]  
    [ WITH GRANT OPTION ]  
    [ AS granting_principal ]  

引数Arguments

permissionpermission
スキーマで許可できる権限を指定します。Specifies a permission that can be granted on a schema. 権限の一覧については、後の「解説」を参照してください。For a list of the permissions, see the Remarks section later in this topic..

ON SCHEMA :: schema _nameON SCHEMA :: schema _name
権限を許可するスキーマを指定します。Specifies the schema on which the permission is being granted. スコープ修飾子 :: が必要です。The scope qualifier :: is required.

database_principaldatabase_principal
権限を許可するプリンシパルを指定します。Specifies the principal to which the permission is being granted. 次のいずれかです。One of the following:

  • データベース ユーザーdatabase user
  • データベース ロール (database role)database role
  • アプリケーション ロール (application role)application role
  • Windows ログインにマップされているデータベース ユーザーdatabase user mapped to a Windows login
  • Windows グループにマップされているデータベース ユーザーdatabase user mapped to a Windows group
  • 証明書にマップされているデータベース ユーザーdatabase user mapped to a certificate
  • 非対称キーにマップされているデータベース ユーザーdatabase user mapped to an asymmetric key
  • サーバー プリンシパルにマップされていないデータベース ユーザーdatabase user not mapped to a server principal.

GRANT OPTIONGRANT OPTION
権限が許可されたプリンシパルが、この権限を他のプリンシパルにも許可できることを示します。Indicates that the principal will also be given the ability to grant the specified permission to other principals.

AS granting_principalAS granting_principal
このクエリを実行するプリンシパルが権限を許可する権利を取得した、元のプリンシパルを指定します。Specifies a principal from which the principal executing this query derives its right to grant the permission. 次のいずれかです。One of the following:

  • データベース ユーザーdatabase user
  • データベース ロール (database role)database role
  • アプリケーション ロール (application role)application role
  • Windows ログインにマップされているデータベース ユーザーdatabase user mapped to a Windows login
  • Windows グループにマップされているデータベース ユーザーdatabase user mapped to a Windows group
  • 証明書にマップされているデータベース ユーザーdatabase user mapped to a certificate
  • 非対称キーにマップされているデータベース ユーザーdatabase user mapped to an asymmetric key
  • サーバー プリンシパルにマップされていないデータベース ユーザーdatabase user not mapped to a server principal.

RemarksRemarks

重要

権限許可対象ユーザーは、ALTER 権限と REFERENCE 権限を組み合わせて使用することで、データを表示したり、許可されていない関数を実行できる場合があります。A combination of ALTER and REFERENCE permissions in some cases could allow the grantee to view data or execute unauthorized functions. たとえば、テーブルの ALTER 権限と関数の REFERENCE 権限を持つユーザーは、関数を介した計算列を作成して実行できます。For example: A user with ALTER permission on a table and REFERENCE permission on a function can create a computed column over a function and have it be executed. この場合、ユーザーには計算列の SELECT 権限も必要です。In this case, the user must also have SELECT permission on the computed column.

スキーマは、データベース レベルのセキュリティ保護可能なリソースで、権限の階層で親となっているデータベースに含まれています。A schema is a database-level securable contained by the database that is its parent in the permissions hierarchy. 次に、スキーマで許可できる権限のうち最も限定的なものを、それらを暗黙的に含む一般的な権限と共に示します。The most specific and limited permissions that can be granted on a schema are listed below, together with the more general permissions that include them by implication.

スキーマ権限Schema permission 権限が含まれるスキーマ権限Implied by schema permission 権限が含まれるデータベース権限Implied by database permission
ALTERALTER CONTROLCONTROL ALTER ANY SCHEMAALTER ANY SCHEMA
CONTROLCONTROL CONTROLCONTROL CONTROLCONTROL
CREATE SEQUENCECREATE SEQUENCE ALTERALTER ALTER ANY SCHEMAALTER ANY SCHEMA
DelDELETE CONTROLCONTROL DelDELETE
EXECUTEEXECUTE CONTROLCONTROL EXECUTEEXECUTE
INSERTINSERT CONTROLCONTROL INSERTINSERT
REFERENCESREFERENCES CONTROLCONTROL REFERENCESREFERENCES
SELECTSELECT CONTROLCONTROL SELECTSELECT
TAKE OWNERSHIPTAKE OWNERSHIP CONTROLCONTROL CONTROLCONTROL
UPDATEUPDATE CONTROLCONTROL UPDATEUPDATE
VIEW CHANGE TRACKINGVIEW CHANGE TRACKING CONTROLCONTROL CONTROLCONTROL
VIEW DEFINITIONVIEW DEFINITION CONTROLCONTROL VIEW DEFINITIONVIEW DEFINITION

注意事項

スキーマに対して ALTER 権限を持つユーザーは、所有権の継承を使用することによって、他のスキーマ内のセキュリティ保護可能なリソース (そのユーザーが明示的にアクセスを拒否されているリソースを含む) にアクセスできます。A user with ALTER permission on a schema can use ownership chaining to access securables in other schemas, including securables to which that user is explicitly denied access. こうしたアクセスが可能になるのは、プリンシパルがオブジェクトとその参照先オブジェクトを所有している場合に、所有権を継承すると、参照先オブジェクトに対する権限チェックが行われないためです。This is because ownership chaining bypasses permissions checks on referenced objects when they are owned by the principal that owns the objects that refer to them. スキーマに対して ALTER 権限を持つユーザーは、そのスキーマの所有者が所有するプロシージャ、シノニム、およびビューを作成でき、A user with ALTER permission on a schema can create procedures, synonyms, and views that are owned by the schema's owner. 所有権の継承により、これらのオブジェクトから、スキーマの所有者が所有する他のスキーマ内の情報にアクセスできるようになります。Those objects will have access (via ownership chaining) to information in other schemas owned by the schema's owner. したがって、スキーマの所有者が他のスキーマも所有している場合、可能であればそのスキーマに対する ALTER 権限は許可しないようにしてください。When possible, you should avoid granting ALTER permission on a schema if the schema's owner also owns other schemas.

たとえば、この問題が発生するシナリオを次に挙げます。For example, this issue may occur in the following scenarios. これらのシナリオでは、U1 というユーザーが、S1 スキーマに対して ALTER 権限を持っていると想定しています。These scenarios assume that a user, referred as U1, has the ALTER permission on the S1 schema. U1 ユーザーには、スキーマ S2 内の T1 というテーブル オブジェクトへのアクセスが拒否されており、The U1 user is denied to access a table object, referred as T1, in the schema S2. S1 スキーマと S2 スキーマは、同じ所有者が所有しています。The S1 schema and the S2 schema are owned by the same owner.

U1 ユーザーは、データベースに対して CREATE PROCEDURE 権限を持ち、S1 スキーマに対して EXECUTE 権限を持っているとします。The U1 user has the CREATE PROCEDURE permission on the database and the EXECUTE permission on the S1 schema. この場合、U1 ユーザーはストアド プロシージャを作成し、そのストアド プロシージャ内で、拒否されたオブジェクト T1 にアクセスできることになります。Therefore, the U1 user can create a stored procedure, and then access the denied object T1 in the stored procedure.

U1 ユーザーは、データベースに対して CREATE SYNONYM 権限を持ち、S1 スキーマに対して SELECT 権限を持っているとします。The U1 user has the CREATE SYNONYM permission on the database and the SELECT permission on the S1 schema. この場合、U1 ユーザーは拒否されたオブジェクト T1 のシノニムを S1 スキーマ内に作成し、そのシノニムを使用して、拒否されたオブジェクト T1 にアクセスできることになります。Therefore, the U1 user can create a synonym in the S1 schema for the denied object T1, and then access the denied object T1 by using the synonym.

U1 ユーザーは、データベースに対して CREATE VIEW 権限を持ち、S1 スキーマに対して SELECT 権限を持っているとします。The U1 user has the CREATE VIEW permission on the database and the SELECT permission on the S1 schema. この場合、U1 ユーザーは拒否されたオブジェクト T1 にデータをクエリするビューを S1 スキーマ内に作成し、そのビューを使用して、拒否されたオブジェクト T1 にアクセスできることになります。Therefore, the U1 user can create a view in the S1 schema to query data from the denied object T1, and then access the denied object T1 by using the view.

詳細については、サポート技術情報の資料 No. 914847 を参照してください。For more information, see the Microsoft KB Article number 914847.

アクセス許可Permissions

権限の許可者 (または AS オプションで指定されたプリンシパル) は、GRANT OPTION によって与えられた権限を保持しているか、権限が暗黙的に与えられる上位の権限を保持している必要があります。The grantor (or the principal specified with the AS option) must have either the permission itself with GRANT OPTION, or a higher permission that implies the permission being granted.

AS オプションを使用する場合は、次の追加要件があります。If using the AS option, these additional requirements apply.

AS granting_principalAS granting_principal 必要な追加権限Additional permission required
データベース ユーザーDatabase user ユーザーに対する IMPERSONATE 権限、db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。IMPERSONATE permission on the user, membership in the db_securityadmin fixed database role, membership in the db_owner fixed database role, or membership in the sysadmin fixed server role.
Windows ログインにマップされているデータベース ユーザーDatabase user mapped to a Windows login ユーザーに対する IMPERSONATE 権限、db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。IMPERSONATE permission on the user, membership in the db_securityadmin fixed database role, membership in the db_owner fixed database role, or membership in the sysadmin fixed server role.
Windows グループにマップされているデータベース ユーザーDatabase user mapped to a Windows group Windows グループのメンバーシップ、db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。Membership in the Windows group, membership in the db_securityadmin fixed database role, membership in the db_owner fixed database role, or membership in the sysadmin fixed server role.
証明書にマップされているデータベース ユーザーDatabase user mapped to a certificate db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。Membership in the db_securityadmin fixed database role, membership in the db_owner fixed database role, or membership in the sysadmin fixed server role.
非対称キーにマップされているデータベース ユーザーDatabase user mapped to an asymmetric key db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。Membership in the db_securityadmin fixed database role, membership in the db_owner fixed database role, or membership in the sysadmin fixed server role.
サーバー プリンシパルにマップされていないデータベース ユーザーDatabase user not mapped to any server principal ユーザーに対する IMPERSONATE 権限、db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。IMPERSONATE permission on the user, membership in the db_securityadmin fixed database role, membership in the db_owner fixed database role, or membership in the sysadmin fixed server role.
データベース ロールDatabase role ロールに対する ALTER 権限、db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。ALTER permission on the role, membership in the db_securityadmin fixed database role, membership in the db_owner fixed database role, or membership in the sysadmin fixed server role.
アプリケーション ロールApplication role ロールに対する ALTER 権限、db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。ALTER permission on the role, membership in the db_securityadmin fixed database role, membership in the db_owner fixed database role, or membership in the sysadmin fixed server role.

オブジェクトの所有者は、所有するオブジェクトの権限を許可できます。Object owners can grant permissions on the objects they own. セキュリティ保護可能なリソースに対して CONTROL 権限があるプリンシパルは、そのリソースの権限を許可できます。Principals with CONTROL permission on a securable can grant permission on that securable.

sysadmin 固定サーバー ロールのメンバーなど、CONTROL SERVER 権限が許可されているユーザーは、サーバー内のセキュリティ保護可能なリソースに対する権限を許可できます。Grantees of CONTROL SERVER permission, such as members of the sysadmin fixed server role, can grant any permission on any securable in the server. db_owner 固定データベース ロールのメンバーなど、データベースに対する CONTROL 権限が許可されているユーザーは、データベース内のセキュリティ保護可能なリソースに対する権限を許可できます。Grantees of CONTROL permission on a database, such as members of the db_owner fixed database role, can grant any permission on any securable in the database. スキーマに対する CONTROL 権限が許可されているユーザーは、スキーマ内のオブジェクトに対する権限を許可できます。Grantees of CONTROL permission on a schema can grant any permission on any object within the schema.

使用例Examples

A.A. スキーマ HumanResources に対する INSERT 権限を、guest に許可するGranting INSERT permission on schema HumanResources to guest

GRANT INSERT ON SCHEMA :: HumanResources TO guest;  

B.B. スキーマ Person に対する SELECT 権限を、データベース ユーザー WilJo に許可するGranting SELECT permission on schema Person to database user WilJo

GRANT SELECT ON SCHEMA :: Person TO WilJo WITH GRANT OPTION;  

参照See Also

DENY (スキーマ権限の拒否) (Transact-SQL) DENY Schema Permissions (Transact-SQL)
REVOKE (スキーマ権限の取り消し) (Transact-SQL) REVOKE Schema Permissions (Transact-SQL)
GRANT (Transact-SQL) GRANT (Transact-SQL)
アクセス許可 (データベース エンジン) Permissions (Database Engine)
プリンシパル (データベース エンジン) Principals (Database Engine)
CREATE CERTIFICATE (Transact-SQL) CREATE CERTIFICATE (Transact-SQL)
CREATE ASYMMETRIC KEY (Transact-SQL) CREATE ASYMMETRIC KEY (Transact-SQL)
CREATE APPLICATION ROLE (Transact-SQL) CREATE APPLICATION ROLE (Transact-SQL)
暗号化階層 Encryption Hierarchy
sys.fn_builtin_permissions (Transact-SQL) sys.fn_builtin_permissions (Transact-SQL)
sys.fn_my_permissions (Transact-SQL) sys.fn_my_permissions (Transact-SQL)
HAS_PERMS_BY_NAME (Transact-SQL)HAS_PERMS_BY_NAME (Transact-SQL)