DCL (データ制御言語)

DCLとは?

DCL (Data Control Language) は、データベースのセキュリティを管理し、「誰が」「どのデータに対して」「何をして良いか」といったアクセス権限を制御するための言語です。

データの安全性を確保する上で非常に重要な役割を果たします。DCLの主要なコマンドは、権限を与える GRANT と、権限を剥奪する REVOKE の2つです。

準備:ロール(ユーザー)の作成

権限を管理する前に、まずは権限を付与する対象となる「ロール」を作成する必要があります。PostgreSQLではユーザーもロールの一種として扱われます。ここでは、サンプルとして sample_user という名前のロールを、ログインパスワード付きで作成してみましょう。

-- 'password' というパスワードでログインできるロールを作成
CREATE ROLE sample_user WITH LOGIN PASSWORD 'password';

権限の付与 (GRANT)

GRANT コマンドは、指定したロールに対してデータベースオブジェクトへの操作権限を付与します。

基本構文

GRANT [権限の種類] ON [オブジェクトの種類] [オブジェクト名] TO [ロール名];
  • 権限の種類: SELECT, INSERT, UPDATE, DELETE, ALL PRIVILEGES (すべての権限)など。
  • オブジェクトの種類: TABLE, DATABASE, SCHEMA, SEQUENCEなど。

使用例

ここでは、事前に employees というテーブルが存在すると仮定します。

-- 例1: sample_userにemployeesテーブルの参照(SELECT)権限を付与
GRANT SELECT ON TABLE employees TO sample_user;

-- 例2: sample_userにemployeesテーブルの追加(INSERT)権限と更新(UPDATE)権限を付与
GRANT INSERT, UPDATE ON TABLE employees TO sample_user;

-- 例3: sample_userにデータベース(例: test_db)への接続権限を付与
GRANT CONNECT ON DATABASE test_db TO sample_user;

権限の剥奪 (REVOKE)

REVOKE コマンドは、GRANTで付与した権限を取り消し、剥奪します。

基本構文

REVOKE [権限の種類] ON [オブジェクトの種類] [オブジェクト名] FROM [ロール名];

使用例

-- 例1: sample_userからemployeesテーブルの更新(UPDATE)権限を剥奪
REVOKE UPDATE ON TABLE employees FROM sample_user;

-- 例2: sample_userからemployeesテーブルの全ての権限を剥奪
REVOKE ALL PRIVILEGES ON TABLE employees FROM sample_user;

適切な権限管理は、意図しないデータの改ざんや情報漏洩を防ぎ、データベースを安全に運用するための基本です。