SQLのGRANT文(SQL GRANT statement)
表やビューへの操作の権限を、利用者に与えるSQL文。取り上げるのはREVOKE文。
もう少し詳しい説明
GRANT文は、利用者に、表やビューへの操作の権限を与えるSQL文です。
grant は英語で「認める」「与える」という意味です。REVOKE文(revoke は「取り消す」)が対になります。
何を決めているのか
データベースには、いろいろな立場の人が触ります。
上の表のように、同じ表に対して、人ごとに別の権限を与えられます。一般社員は読むだけ、経理担当は書き換えもできる、という設定です。
GRANTは○を1つ付ける操作、REVOKEは○を1つ外す操作にあたります。
書き方
形は決まっています。
GRANT 権限 ON 対象 TO 利用者
具体例です。
GRANT SELECT ON 社員表 TO 山田
「社員表を参照する権限を、山田に与える」という意味になります。
取り上げるときは FROM に変わります。
REVOKE SELECT ON 社員表 FROM 山田
TO と FROM が入れ替わるところは、問われることがあります。与えるのは「〜へ」、取り上げるのは「〜から」です。
権限の種類
よく出るのは次のものです。
| 権限 | 何ができるか |
|---|---|
| SELECT | 行を参照する |
| INSERT | 行を追加する |
| UPDATE | 行を書き換える |
| DELETE | 行を削除する |
| ALL PRIVILEGES | 上の全部 |
まとめて書くこともできます。
GRANT SELECT, INSERT ON 社員表 TO 山田
列を限って与えることもできます。
GRANT UPDATE (住所) ON 社員表 TO 山田
これなら、住所だけは書き換えられて、給与は書き換えられません。
誰に与えるか
利用者の名前を書くほかに、2つの書き方があります。
- PUBLIC … 全員に与える
- ロール … 権限をまとめた役割の名前に与える
ロールは、権限の束に名前を付けたものです。「経理担当」というロールに必要な権限をまとめて与えておき、人にはロールを与えます。
人の異動があったときに、ロールを付け替えるだけで済みます。1人ずつ権限を直していくと、外し忘れが起きます。
行を絞りたいときは、ビューを使う
ここが試験で問われる組合せです。
GRANTで指定できるのは、表やビューの単位です。「この表の、この行だけ」という与え方は、GRANT文だけではできません。
そこで、実表と導出表(ビュー。問合せに名前を付けたもの)を使います。
- 見せてよい行や列だけを取り出すビューを作る
- そのビューにだけ権限を与える
- もとの表には権限を与えない
東京支店の人には、東京支店の行だけを取り出したビューを与えます。相手からは、ほかの支店の行があること自体が見えません。
ビューで形を作り、GRANTで渡す。 この2段構えで、行と列の単位まで絞れます。
権限を渡し直せるようにする
WITH GRANT OPTION を付けると、与えられた人がさらに別の人へ同じ権限を与えられるようになります。
GRANT SELECT ON 社員表 TO 山田 WITH GRANT OPTION
便利に見えますが、誰が誰に与えたかが枝分かれしていきます。管理が追えなくなるので、付けないのが基本です。
必要なものだけを与える
権限の設計で守る考え方があります。その人の仕事に必要なものだけを与えることです。最小権限の原則と呼びます。
「とりあえず全部与えておく」と、次のことが起きます。
- 操作を間違えたときの被害が大きくなる
- 利用者IDが盗まれたときにできることが増える
- SQLインジェクション(入力に細工をして、意図しないSQLを実行させる攻撃)が通ったときの被害が広がる
攻撃が通ること自体は防げなくても、できることを狭めておけます。 権限の設定が対策として挙げられるのは、このためです。
試験ではこう出る
科目A(旧・午前)のデータベース分野で出ます。
いちばん多いのは、GRANT文の役割を選ばせる問題です。「利用者に対して、表へのアクセス権限を与える」が答えになります。誤答として並ぶのは、SELECT文(行を取り出す)、ALTER TABLE文(表の定義を変える)、COMMIT(更新を確定する)です。どれも権限の話ではありません。
REVOKE文との組合せも定番です。与えるのがGRANT、取り上げるのがREVOKEという対で覚えてください。
ビューと組み合わせる形は、応用情報で出ます。「特定の行だけを参照させたい。どうするか」という問いに対して、「その行を取り出すビューを定義し、ビューに権限を与える」が答えの向きになります。実表(ビューのもとになっている、実際にデータが入っている表)に権限を与えてしまう選択肢が誤答として置かれます。
WITH GRANT OPTION は、「与えられた権限を、さらに他者へ与えられるようにする」という説明で出ます。
関連する用語
- 実表と導出表
- ビューに権限を与えると、見せる行や列を絞れる。GRANTと組み合わせて使う
- SQLの句
- SELECT文を組み立てる部品。GRANTは表を読み書きする文ではなく、権限を扱う文
- SQLインジェクション
- 入力に細工して不正な操作をさせる攻撃。与える権限を絞っておくと被害が小さくなる
- 関係データベース
- 表の形でデータを扱う仕組み。誰がどの表を触れるかを決めるのがGRANT
- システム監査
- 決まりどおりに運用されているかを調べる活動。権限の設定は調べられる対象になる
ミニクイズ
SQLのGRANT文の役割として、最も適切なものはどれか。
正解は 4番:利用者に対して、表やビューへの参照や更新などの権限を与える
GRANT文は、どの利用者がどの表やビューに対して何をしてよいかを設定する文です。与えた権限を取り上げるのはREVOKE文です。条件に合う行を取り出すのはSELECT文、表の定義を変えるのはALTER TABLE文、一連の更新をひとまとめにするのはトランザクションの制御(COMMITとROLLBACK)で、いずれも別の文が担います。
この分野をまとめて解く → データベースのミニテスト(全35問)
最終更新:2026-11-05