情報処理試験を勉強していると、「DDLとDMLは分かったけど、DCLって何?GRANTやREVOKEってどう使うの?」と疑問に思うタイミングが来ます。

この記事では、DCL(データ制御言語)の意味・構文・DDL/DMLとの違いを、日常の例え話を交えて整理します。

対象試験と出題頻度

DCL(SQL)は、ITパスポート・基本情報技術者・応用情報技術者の3区分で出題されるテーマです。

SQLの命令分類(DDLDML・DCL)を問う問題や、GRANT文の役割を選ばせる問題として定番化しています。

詳細をクリックして確認
対象試験:
ITパスポート
基本情報技術者
応用情報技術者
出題頻度:
★★★★☆
ランクA(重要)必ず覚えておくべき

用語の定義

DCL(Data Control Language:データ制御言語)とは、一言で言うと

 「データベースに対する操作権限の付与・取り消しを行うSQL命令の分類

のことです。

イメージとしては、オフィスの入館カードの発行・回収を担当する総務部です。

新入社員が入ったら入館カードを渡し(=GRANT)、退職したら回収する(=REVOKE)。

建物の設計図を引く仕事でも、フロアの中で書類を扱う仕事でもなく、「誰に入室権限を与えるか」だけを管理する部門がDCLです。

📊 DCL(SQL)の基本情報

項目 内容
正式名称 Data Control Language(データ制御言語)
代表的な命令 GRANT(権限付与)、REVOKE(権限取り消し)
操作対象 テーブル・ビューなどのオブジェクトに対するアクセス権限
関連分類 DDL(定義言語)、DML(操作言語)

解説

関係データベースを複数のユーザーで共有する環境では、「誰がどのテーブルに対して何をしてよいか」を明確に管理する必要があります。全員がすべてのデータを自由に削除・変更できる状態は、セキュリティ上も運用上も危険です。

この「権限管理」を担うのがDCLです。

SQLの命令は大きく3つに分類されますが、それぞれの役割は明確に分かれています。

SQL命令の3分類:DDL・DML・DCL

分類 正式名称 役割 代表的な命令
DDL Data Definition Language テーブルやビューの「構造」を定義・変更・削除する CREATE, ALTER, DROP
DML Data Manipulation Language テーブル内の「データ」を検索・追加・更新・削除する SELECT, INSERT, UPDATE, DELETE
DCL Data Control Language テーブルなどに対する「権限」を付与・取り消しする GRANT, REVOKE

前述の入館カードの例えに当てはめると、DDLはオフィスビル自体を建てたり壊したりする「建設会社」、DMLはオフィスの中で書類を出し入れする「事務スタッフ」です。

GRANT文の構文

GRANT文は、指定したユーザーやロールに対してオブジェクトへの操作権限を付与します。

GRANT 権限 ON オブジェクト名
    TO { ユーザー名 | ロール名 | PUBLIC }
    [ WITH GRANT OPTION ]

「WITH GRANT OPTION」を付けると、権限を受け取ったユーザーがさらに他のユーザーへ同じ権限を再付与できます。

-- 例:ユーザー tanaka に「社員」テーブルへの SELECT 権限を付与
GRANT SELECT ON 社員 TO tanaka;

REVOKE文の構文

REVOKE文は、GRANT文で付与した権限を取り消します。

REVOKE 権限 ON オブジェクト名
    FROM { ユーザー名 | ロール名 | PUBLIC }
-- 例:ユーザー tanaka から「社員」テーブルへの SELECT 権限を取り消し
REVOKE SELECT ON 社員 FROM tanaka;

ここだけは確実に押さえてください。GRANTは「TO(~に与える)」、REVOKEは「FROM(~から取り消す)」です。前置詞が逆になる点が最大の区別ポイントです。

図解:GRANT / REVOKE の流れ

GRANT / REVOKE の権限フロー

DB
管理者

GRANT … TO

REVOKE … FROM

一般
ユーザー

操作

テーブル

▲ 管理者がGRANTで権限を渡すとユーザーはテーブルを操作できる。REVOKEで回収すると操作不可に戻る。

では、この用語が試験でどのように出題されるか見ていきましょう。

💡 DCL(SQL)の核心を3行で

・SQLの命令はDDL(構造定義)・DML(データ操作)・DCL(権限制御)の3つに分類される
・DCLの代表命令はGRANT(権限付与 / TO)とREVOKE(権限取り消し / FROM)
・WITH GRANT OPTIONを付けると、権限の再付与が可能になる


試験ではこう出る!

DCLに関する出題は、GRANT文の役割を直接問うパターンと、SQL文の分類(DDL/DML/DCL)の対応を問うパターンの2つに大別されます。

📊 過去問での出題実績

試験回 出題内容 問われたポイント
AP R2秋
午前 問26
GRANT文の説明として適切なものを選ぶ問題。 ・「表への問合せ・更新・追加・削除の操作権限を付与する」が正解
・パスワード設定(ALTER USER)、ビュー作成(CREATE VIEW)、暗号化がひっかけ
AP H23秋
午前 問28
上記R2秋 問26と同一構成の問題(流用)。 ・APでは同じ問題が数年おきに再出題される典型例
FE R4年
免除 問26
同じくGRANT文の説明を選ぶ問題。AP R2秋 問26と同一。 ・FEとAPで同じ問題が共有される実例

📝 IPA試験での出題パターン

パターン1:「GRANT文の説明を選べ」
4つの選択肢にパスワード設定・ビュー作成・暗号化・権限付与の説明が並び、GRANT文に該当するものを選ぶ形式。ひっかけの「ビューで行・列を制限する」はCREATE VIEW文の話なので注意。

 

パターン2:「SQL文と分類の正しい組み合わせを選べ」
GRANT文=DCL、DELETE文=DML、CREATE TABLE文=DDLのように、命令と分類の対応を問う形式。「SELECT文=DCL」のような誤った組み合わせがひっかけ。

 

試験ではここまででOKです。GRANT文で指定できる個別の権限名(SELECT, INSERT, UPDATE, DELETEなど)の一覧まで暗記する必要はありません。深追いは不要です。


【確認テスト】理解度チェック

ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。


Q. SQL文と、その分類の組み合わせとして最も適切なものはどれでしょうか?

  • A. CREATE TABLE文 ── DML(Data Manipulation Language)
  • B. GRANT文 ── DCL(Data Control Language)
  • C. SELECT文 ── DDL(Data Definition Language)

正解と解説を見る

正解:B

解説:
GRANT文はデータベースのオブジェクトに対する操作権限を付与するSQL文であり、DCL(データ制御言語)に分類されます。

選択肢AのCREATE TABLE文はテーブルの構造を定義する命令であり、DML(データ操作言語)ではなくDDL(データ定義言語)に分類されます。選択肢CのSELECT文はテーブルからデータを検索する命令であり、DDL(データ定義言語)ではなくDML(データ操作言語)に分類されます。


よくある質問(FAQ)

Q. COMMIT文やROLLBACK文はDCLに含まれますか?

教科書やDBMS製品によって分類が異なります。IPA試験のシラバスでは、COMMITやROLLBACKはトランザクション制御文(TCL:Transaction Control Language)として扱われることが多く、DCLとは区別されます。試験範囲では「DCL=GRANT・REVOKE」とだけ覚えておけば得点に支障はありません。

Q. GRANTで付与できる権限にはどのような種類がありますか?

代表的なものはSELECT(検索)、INSERT(追加)、UPDATE(更新)、DELETE(削除)の4つです。さらにALL PRIVILEGES(全権限)を指定してまとめて付与することもできます。実務ではテーブル単位・カラム単位で細かく制御するケースがありますが、IPA試験ではそこまで細かく問われることはありません。

Q. 「ビューでアクセスを制限する」のはDCLではないのですか?

ビュー(VIEW)はDDLのCREATE VIEW文で作成するもので、DCLには含まれません。ビューを使えば特定の行・列だけを見せることが可能ですが、これはデータの「見せ方」を制御する仕組みであり、「操作権限そのもの」を制御するGRANT/REVOKEとは目的が異なります。過去問のひっかけ選択肢として頻出するため、この区別は押さえておいてください。

Q. WITH GRANT OPTIONで再付与された権限は、元の権限を取り消すとどうなりますか?

元のユーザーからREVOKEで権限を取り消すと、そのユーザーがWITH GRANT OPTIONで再付与した先の権限も連鎖的に取り消されます(CASCADE動作)。権限が芋づる式に消える仕組みです。実務では意図しない権限剥奪を防ぐため、ロール(役割グループ)を使った権限管理が一般的です。