GRANT (スキーマ権限の許可) (Transact-SQL)
スキーマの権限を許可します。
構文
GRANT permission [ ,...n ] ON SCHEMA :: schema_name
TO database_principal [ ,...n ]
[ WITH GRANT OPTION ]
[ AS granting_principal ]
引数
- permission
スキーマで許可できる権限を指定します。下の表を参照してください。
- ON SCHEMA :: schema*_name*
権限を許可するスキーマを指定します。スコープ修飾子 "::" が必要です。
database_principal
権限を許可するプリンシパルを指定します。次のいずれかです。- データベース ユーザー
- データベース ロール
- アプリケーション ロール
- Windows ログインにマップされているデータベース ユーザー
- Windows グループにマップされているデータベース ユーザー
- 証明書にマップされているデータベース ユーザー
- 非対称キーにマップされているデータベース ユーザー
- サーバー プリンシパルにマップされていないデータベース ユーザー
- GRANT OPTION
権限が許可されたプリンシパルが、この権限を他のプリンシパルにも許可できることを示します。
AS granting_principal
このクエリを実行するプリンシパルが権限を許可する権利を取得した、元のプリンシパルを指定します。次のいずれかです。- データベース ユーザー
- データベース ロール
- アプリケーション ロール
- Windows ログインにマップされているデータベース ユーザー
- Windows グループにマップされているデータベース ユーザー
- 証明書にマップされているデータベース ユーザー
- 非対称キーにマップされているデータベース ユーザー
- サーバー プリンシパルにマップされていないデータベース ユーザー
解説
重要 : |
---|
権限許可対象ユーザーは、ALTER 権限と REFERENCE 権限を組み合わせて使用することで、データを表示したり、許可されていない関数を実行できる場合があります。たとえば、テーブルの ALTER 権限と関数の REFERENCE 権限を持つユーザーは、関数を介した計算列を作成して実行できます。この場合、ユーザーには計算列の SELECT 権限も必要です。 |
スキーマは、データベース レベルのセキュリティ保護可能なリソースで、権限の階層で親となっているデータベースに含まれています。次に、スキーマで許可できる権限のうち最も限定的なものを、それらを暗黙的に含む一般的な権限と共に示します。
スキーマ権限 | 権限が含まれるスキーマ権限 | 権限が含まれるデータベース権限 |
---|---|---|
CONTROL |
CONTROL |
CONTROL |
TAKE OWNERSHIP |
CONTROL |
CONTROL |
ALTER |
CONTROL |
ALTER ANY SCHEMA |
EXECUTE |
CONTROL |
EXECUTE |
INSERT |
CONTROL |
INSERT |
DELETE |
CONTROL |
DELETE |
UPDATE |
CONTROL |
UPDATE |
SELECT |
CONTROL |
SELECT |
REFERENCES |
CONTROL |
REFERENCES |
VIEW DEFINITION |
CONTROL |
VIEW DEFINITION |
注意 : |
---|
スキーマに対して 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 にアクセスできることになります。
詳細については、サポート技術情報の資料 No. 914847 を参照してください。
権限
権限の許可者 (または AS オプションで指定されたプリンシパル) は、GRANT OPTION によって与えられた権限を保持しているか、権限が暗黙的に与えられる上位の権限を保持している必要があります。
AS オプションを使用する場合は、次の追加要件があります。
AS granting_principal | 必要な追加権限 |
---|---|
データベース ユーザー |
ユーザーに対する 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 固定サーバー ロールのメンバシップ。 |
オブジェクトの所有者は、所有するオブジェクトの権限を許可できます。セキュリティ保護可能なリソースに対して CONTROL 権限があるプリンシパルは、そのリソースの権限を許可できます。
sysadmin 固定サーバー ロールのメンバなど、CONTROL SERVER 権限が許可されているユーザーは、サーバー内のセキュリティ保護可能なリソースに対する権限を許可できます。db_owner 固定データベース ロールのメンバなど、データベースに対する CONTROL 権限が許可されているユーザーは、データベース内のセキュリティ保護可能なリソースに対する権限を許可できます。スキーマに対する CONTROL 権限が許可されているユーザーは、スキーマ内のオブジェクトに対する権限を許可できます。
例
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;
参照
関連項目
DENY (スキーマ権限の拒否) (Transact-SQL)
REVOKE (スキーマ権限の取り消し) (Transact-SQL)
GRANT (Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)
CREATE ASYMMETRIC KEY (Transact-SQL)
CREATE APPLICATION ROLE (Transact-SQL)