GRANT、REVOKEおよびDENYデータベース権限
データ制御言語(DCL)は構造化照会言語 (SQL)のサブセットであり、データベース管理者はリレーショナル・データベースへのセキュリティー・アクセスを構成できます。 データベースオブジェクトの追加および削除に使用されるデータ定義言語(DDL)、およびデータベースの内容の取得、挿入、および変更に使用されるデータ操作言語(DML)を補完します。
DCLは、GRANT、REVOKE、およびDENYの3つのコマンドのみで構成されているため、 SQLサブセットの中で最もシンプルです。 これらの3つのコマンドを組み合わせることで、管理者はデータベース権限をきめ細かく設定したり削除したりすることができます。
GRANTコマンドによる権限の追加
管理者は、GRANTコマンドを使用して、 データベースユーザーに新しい権限を追加することができます 。 それは以下のように定義された非常に単純な構文を持っています:
GRANT [権限] ON [オブジェクト] TO [ユーザー] [WITH GRANT OPTION]このコマンドで提供できる各パラメータの概要は次のとおりです。
- 特権には、キーワードALL(多種多様な権限を付与する)または特定のデータベース権限または権限セットのいずれかを指定できます。 例には、CREATE DATABASE、SELECT、INSERT、UPDATE、DELETE、EXECUTEおよびCREATE VIEWがあります。
- Objectは任意のデータベースオブジェクトです。 有効な権限オプションは、この句に含めるデータベースオブジェクトのタイプによって異なります。 通常、オブジェクトはデータベース、関数、 ストアドプロシージャ 、テーブルまたはビューのいずれかになります。
- ユーザーはどのデータベースユーザーでもかまいません。 ロールベースのデータベース・セキュリティを使用する場合は、この句のユーザーのロールを使用することもできます。
- GRANTコマンドの最後にオプションのWITH GRANT OPTION句を指定すると、指定したユーザーにSQL文で定義された権限を付与するだけでなく、同じ権限を他のデータベース・ユーザーに付与する権限もユーザーに与えます。 このため、この節は慎重に使用してください。
たとえば、HRというデータベースのemployees表から情報を取り出す機能を、ユーザーJoeに付与することを想定します。 次のSQLコマンドを使用できます。
HR.employees TO Joeの付与を許可するこれでJoeはemployees表から情報を取り出すことができます。 ただし、GRANT文にWITH GRANT OPTION句を含めなかったため、他のユーザーにその表から情報を取得する権限を与えることはできません。
データベースアクセスの取り消し
REVOKEコマンドは、そのようなアクセスが以前に許可されたユーザーからデータベース・アクセスを除去するために使用されます。 このコマンドの構文は次のように定義されています。
REVOKE [GRANT OPTION FOR] [許可] ON [オブジェクト] FROM [ユーザー] [CASCADE]REVOKEコマンドのパラメータの概要を次に示します。
- Permissionは、特定されたユーザーから削除するデータベースのアクセス許可を指定します。 このコマンドは、以前に識別された許可に対して行われたGRANTとDENYの両方のアサーションを取り消します。
- Objectは任意のデータベースオブジェクトです。 有効な権限オプションは、この句に含めるデータベースオブジェクトのタイプによって異なります。 通常、オブジェクトはデータベース、関数、ストアドプロシージャ、テーブルまたはビューのいずれかになります。
- ユーザーはどのデータベースユーザーでもかまいません。 ロールベースのデータベース・セキュリティを使用する場合は、この句のユーザーのロールを使用することもできます。
- GRANT OPTION FOR句は、指定されたユーザーの権限を削除して、指定された権限を他のユーザーに付与します。 注 : REVOKEステートメントにGRANT OPTION FOR節を含めると、1次許可は取り消されません 。 この句は 、付与能力のみを取り消します。
- また、 CASCADEオプションは、指定されたユーザーが許可を与えたユーザーから、指定された権限を取り消します。
たとえば、次のコマンドは、前の例でJoeに与えられたアクセス権を取り消します。
ジョーからHR.employeesのSELECTを取り消す明示的にデータベースアクセスを拒否する
DENYコマンドは、ユーザーが特定の許可を受け取らないように明示的に指定するために使用されます。 これは、ユーザーが権限を付与されているロールまたはグループのメンバーで、そのユーザーが例外を作成してアクセス許可を継承しないようにする場合に役立ちます。 このコマンドの構文は次のとおりです。
DENY [許可] ON [オブジェクト] TO [ユーザー] DENYコマンドのパラメーターは、GRANTコマンドで使用されるパラメーターと同じです。
たとえば、Matthewがemployeesテーブルから情報を削除する機能を受け取らないようにするには、次のコマンドを発行します。