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