データ制御言語(DCL)とは?GRANT・REVOKE・DENYで学ぶデータベース権限管理
データ制御言語(Data Control Language:DCL)は、SQL(Structured Query Language)のサブセットの一つです。データベース管理者はDCLを使用して、リレーショナルデータベースへのセキュリティアクセスを設定します。DCLは、データベースオブジェクトの追加や削除を行う「データ定義言語(DDL)」、およびデータベースの内容を取得・挿入・更新する「データ操作言語(DML)」と相互に補完し合う関係にあります。
DCLはSQLのサブセットの中で最もシンプルな言語です。というのも、DCLを構成するコマンドは「GRANT」「REVOKE」「DENY」の3つだけだからです。この3つのコマンドを組み合わせることで、管理者はデータベースの権限をきめ細かく設定したり解除したりすることができます。
GRANTコマンドで権限を付与する
GRANTコマンドは、データベースユーザーに新しい権限を付与するためのコマンドです。構文は非常にシンプルで、以下のように定義されています。
GRANT [privilege]
ON [object]
TO [user]
[WITH GRANT OPTION]
各パラメータの意味は次のとおりです。
- privilege(権限) — さまざまな権限を一括して付与するキーワード「ALL」、または特定のデータベース権限もしくは権限の組み合わせを指定します。例としては、CREATE DATABASE、SELECT、INSERT、UPDATE、DELETE、EXECUTE、CREATE VIEWなどが挙げられます。
- object(オブジェクト) — 任意のデータベースオブジェクトを指定できます。指定できる権限の種類は、この句に含めるオブジェクトのタイプによって異なります。通常、オブジェクトにはデータベース、関数、ストアドプロシージャ、テーブル、ビューのいずれかを指定します。
- user(ユーザー) — 任意のデータベースユーザーを指定できます。ロールベースのデータベースセキュリティを活用したい場合は、ユーザーの代わりにロールを指定することも可能です。
- GRANTコマンドの末尾に任意のWITH GRANT OPTION句を付けると、指定したユーザーにSQLステートメントで定義した権限を与えるだけでなく、そのユーザー自身が同じ権限を他のデータベースユーザーに付与できるようになります。そのため、この句を使用する際は慎重に検討してください。
たとえば、「Joe」というユーザーに対して、「HR」というデータベース内の「employees」テーブルから情報を取得する権限を付与したい場合は、次のSQLコマンドを使用します。
GRANT SELECT
ON HR.employees
TO Joe
これにより、Joeはemployeesテーブルから情報を取得できるようになります。ただし、このDCLスクリプトにはWITH GRANT OPTION句が含まれていないため、Joeが他のユーザーに対して同じテーブルへのアクセス権限を付与することはできません。
REVOKEコマンドでアクセス権限を取り消す
REVOKEコマンドは、以前に付与したデータベースへのアクセス権限をユーザーから取り消すためのコマンドです。構文は以下のように定義されています。
REVOKE [GRANT OPTION FOR] [permission]
ON [object]
FROM [user]
[CASCADE]
REVOKEコマンドの各パラメータの意味は次のとおりです。
- permission(権限) — 指定したユーザーから取り消すデータベース権限を指定します。このコマンドを実行すると、対象の権限について以前に行われたGRANTおよびDENYの設定の両方が取り消されます。
- object(オブジェクト) — 任意のデータベースオブジェクトを指定できます。指定できる権限の種類は、この句に含めるオブジェクトのタイプによって異なります。通常、オブジェクトにはデータベース、関数、ストアドプロシージャ、テーブル、ビューのいずれかを指定します。
- user(ユーザー) — 任意のデータベースユーザーを指定できます。ロールベースのデータベースセキュリティを活用したい場合は、ユーザーの代わりにロールを指定することも可能です。
- GRANT OPTION FOR句を指定すると、指定したユーザーが他のユーザーにその権限を付与する能力だけが取り消されます。REVOKEステートメントにGRANT OPTION FOR句を含めた場合、元の権限自体は取り消されず、権限を譲渡する能力のみが無効化される点に注意してください。
- CASCADEオプションを指定すると、指定したユーザーが権限を付与していた他のユーザーからも、その権限が連鎖的に取り消されます。
たとえば、前述の例でJoeに付与した権限を取り消すには、次のコマンドを使用します。
REVOKE SELECT
ON HR.employees
FROM Joe
DENYコマンドでアクセスを明示的に拒否する
DENYコマンドは、特定のユーザーが特定の権限を受け取らないように明示的に拒否するためのコマンドです。この機能は、あるユーザーが権限を持つロールやグループに所属しているものの、その個別のユーザーには権限を継承させたくない場合などに、例外を作成する形で役立ちます。構文は以下のとおりです。
DENY [permission]
ON [object]
TO [user]
DENYコマンドのパラメータは、GRANTコマンドで使用するものと同一です。たとえば、「Matthew」というユーザーがemployeesテーブルから情報を削除できないことを確実にしたい場合は、次のコマンドを発行します。
DENY DELETE
ON HR.employees
TO Matthew
-
Excelでデータベースを作成する方法【初心者向け・かんたん7ステップ】
Excelを使って手軽にデータベースを作りたいと思ったことはありませんか?本記事では、たった7つのステップでExcelにデータベースを作成する方法を、初心者の方にもわかりやすく解説します。Microsoft Accessは高機能なデータベースソフトですが、操作が複雑でとっつきにくいと感じる方も多いはず。そんなときこそ、普段使い慣れたExcelが最適な選択肢になります。それでは、具体的な手順を学んでいきましょう。まずは、以下の練習用ワークブックをダウンロードしてください。記事の内容がより理解しやすくなります。Excelでデータベースを作成する7つのステップExcelブックを正しく設計すれば、それ
-
【Excel】自動的に更新されるデータベースの作り方|4つの実践テクニック
この記事では、Excelで自動的に更新されるデータベースを作成するための、実用的な4つの方法をわかりやすく解説します。売上や天気予報など、常に変化するデータを扱う業務では、元データが更新されたときにデータベース側も自動的に反映される仕組みが非常に重要です。手作業でのコピーや修正の手間を省き、ミスも防げます。それでは、具体例とともに各方法を見ていきましょう。 Excelで自動更新されるデータベースを作成する4つの方法 方法1:Webからデータを抽出して自動更新データベースを作成する 課題:Web上の「ニューヨーク(アメリカ)の14日間天気予報」を抽出し、自動的に更新されるExcelデータベースを