適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Microsoft Fabric の SQL 分析エンドポイント
Microsoft Fabric のウェアハウス
Microsoft Fabric プレビューの SQL データベース
スキーマの権限を許可します。
Syntax
GRANT permission [ ,...n ] ON SCHEMA :: schema_name
TO database_principal [ ,...n ]
[ WITH GRANT OPTION ]
[ AS granting_principal ]
Arguments
permission
スキーマで許可できる権限を指定します。 権限の一覧については、後の「解説」を参照してください。
ON SCHEMA :: schema_name
権限を許可するスキーマを指定します。 スコープ修飾子 :: が必要です。
database_principal
権限を許可するプリンシパルを指定します。 次のいずれかになります。
- database user
- database role
- application role
- Windows ログインにマップされているデータベース ユーザー
- Windows グループにマップされているデータベース ユーザー
- 証明書にマップされているデータベース ユーザー
- 非対称キーにマップされているデータベース ユーザー
- サーバー プリンシパルにマップされていないデータベース ユーザー
GRANT OPTION
権限が許可されたプリンシパルが、この権限を他のプリンシパルにも許可できることを示します。
AS granting_principal
このクエリを実行するプリンシパルが権限を許可する権利を取得した、元のプリンシパルを指定します。 次のいずれかになります。
- database user
- database role
- application role
- Windows ログインにマップされているデータベース ユーザー
- Windows グループにマップされているデータベース ユーザー
- 証明書にマップされているデータベース ユーザー
- 非対称キーにマップされているデータベース ユーザー
- サーバー プリンシパルにマップされていないデータベース ユーザー
Remarks
Important
権限許可対象ユーザーは、ALTER 権限と REFERENCE 権限を組み合わせて使用することで、データを表示したり、許可されていない関数を実行できる場合があります。 次に例を示します。テーブルの ALTER 権限と関数の REFERENCE 権限を持つユーザーは、関数を介した計算列を作成して実行できます。 この場合、ユーザーには計算列の SELECT 権限も必要です。
スキーマは、データベース レベルのセキュリティ保護可能なリソースで、権限の階層で親となっているデータベースに含まれています。 次に、スキーマで許可できる権限のうち最も限定的なものを、それらを暗黙的に含む一般的な権限と共に示します。
Schema permission | 権限が含まれるスキーマ権限 | 権限が含まれるデータベース権限 |
---|---|---|
ALTER | CONTROL | 任意のスキーマを変更する |
CONTROL | CONTROL | CONTROL |
CREATE SEQUENCE | ALTER | 任意のスキーマを変更する |
DELETE | CONTROL | DELETE |
EXECUTE | CONTROL | EXECUTE |
INSERT | CONTROL | INSERT |
REFERENCES | CONTROL | REFERENCES |
SELECT | CONTROL | SELECT |
TAKE OWNERSHIP | CONTROL | CONTROL |
UPDATE | CONTROL | UPDATE |
変更の追跡を表示する | CONTROL | CONTROL |
VIEW DEFINITION | CONTROL | VIEW DEFINITION |
Caution
スキーマに対して ALTER 権限を持つユーザーは、所有権の継承を使用することによって、他のスキーマ内のセキュリティ保護可能なリソース (そのユーザーが明示的にアクセスを拒否されているセキュリティ保護可能なリソースを含む) にアクセスできます。 こうしたアクセスが可能になるのは、プリンシパルがオブジェクトとその参照先オブジェクトを所有している場合に、所有権を継承すると、参照先オブジェクトに対する権限チェックが行われないためです。 スキーマに対して ALTER 権限を持つユーザーは、そのスキーマの所有者が所有するプロシージャ、シノニム、およびビューを作成できます。 所有権の継承により、これらのオブジェクトから、スキーマの所有者が所有する他のスキーマ内の情報にアクセスできるようになります。 したがって、スキーマの所有者が他のスキーマも所有している場合、可能であればそのスキーマに対する ALTER 権限は許可しないようにしてください。
たとえば、この問題が発生するシナリオを次に挙げます。 これらのシナリオでは、U1 というユーザーが、S1 スキーマに対して ALTER 権限を持っていると想定しています。 U1 ユーザーには、スキーマ S2 内の T1 というテーブル オブジェクトへのアクセスが拒否されています。 S1 スキーマと S2 スキーマは、同じ所有者が所有しています。
U1 ユーザーは、データベースに対して CREATE PROCEDURE 権限を持ち、S1 スキーマに対して EXECUTE 権限を持っているとします。 この場合、U1 ユーザーはストアド プロシージャを作成し、そのストアド プロシージャ内で、拒否されたオブジェクト T1 にアクセスすることができます。
U1 ユーザーは、データベースに対して CREATE SYNONYM 権限を持ち、S1 スキーマに対して SELECT 権限を持っているとします。 この場合、U1 ユーザーは拒否されたオブジェクト T1 のシノニムを S1 スキーマ内に作成し、そのシノニムを使用して、拒否されたオブジェクト T1 にアクセスできることになります。
U1 ユーザーは、データベースに対して CREATE VIEW 権限を持ち、S1 スキーマに対して SELECT 権限を持っているとします。 この場合、U1 ユーザーは拒否されたオブジェクト T1 にデータをクエリするビューを S1 スキーマ内に作成し、そのビューを使用して、拒否されたオブジェクト T1 にアクセスできることになります。
Permissions
権限の許可者 (または AS オプションで指定されたプリンシパル) は、GRANT OPTION によって与えられた権限を保持しているか、権限が暗黙的に与えられる上位の権限を保持している必要があります。
AS オプションを使用する場合は、次の追加要件があります。
AS granting_principal | 必要な追加権限 |
---|---|
Database user | ユーザーに対する 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 固定サーバー ロールのメンバーシップ。 |
Database role | ロールに対する ALTER 権限、db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。 |
Application role | ロールに対する ALTER 権限、db_securityadmin 固定データベース ロールのメンバーシップ、db_owner 固定データベース ロールのメンバーシップ、または sysadmin 固定サーバー ロールのメンバーシップ。 |
オブジェクトの所有者は、所有するオブジェクトの権限を許可できます。 セキュリティ保護可能なリソースに対して CONTROL 権限があるプリンシパルは、そのリソースの権限を許可できます。
sysadmin 固定サーバー ロールのメンバーなど、CONTROL SERVER 権限が許可されているユーザーは、サーバー内のセキュリティ保護可能なリソースに対する権限を許可できます。 db_owner 固定データベース ロールのメンバーなど、データベースに対する CONTROL 権限が許可されているユーザーは、データベース内のセキュリティ保護可能なリソースに対する権限を許可できます。 スキーマに対する CONTROL 権限が許可されているユーザーは、スキーマ内のオブジェクトに対する権限を許可できます。
Examples
A. スキーマ HumanResources に対する INSERT 権限を、guest に許可する
GRANT INSERT ON SCHEMA :: HumanResources TO guest;
B. スキーマ Person に対する SELECT 権限を、データベース ユーザー WilJo に許可する
GRANT SELECT ON SCHEMA :: Person TO WilJo WITH GRANT OPTION;
See Also
DENY (スキーマ権限の拒否) (Transact-SQL)
REVOKE (スキーマ権限の取り消し) (Transact-SQL)
GRANT (Transact-SQL)
権限 (データベース エンジン)
プリンシパル (データベース エンジン)
証明書を作成する (Transact-SQL)
非対称キーを作成する(Transact-SQL)
アプリケーションロールの作成 (Transact-SQL)
Encryption Hierarchy
sys.fn_builtin_permissions (Transact-SQL)
sys.fn_my_permissions (Transact-SQL)
HAS_PERMS_BY_NAME (Transact-SQL)