PostgreSQLの権限管理を完全解説|スキーマ単位で理解するデータベースセキュリティの基礎
生徒
「PostgreSQLを勉強していたら“権限”って言葉が出てきたんですが、何ができて何ができないのかよく分かりません……」
先生
「権限は、誰がどのデータを触っていいかを決めるためのルールです。家でいうと、部屋に入っていい人、引き出しを開けていい人を決める鍵のようなものです。」
生徒
「スキーマ単位で管理できるって聞いたんですが、それって何が便利なんですか?」
先生
「スキーマ単位で権限を決めると、テーブルをまとめて安全に管理できます。今日は、パソコン初心者でも分かるように、スキーマ権限の考え方と使い方を説明します。」
1. SQLとは何か?
SQLは、データベースという「情報をたくさん保存する箱」に対して命令を出すための言語です。名簿から人を探したり、新しい情報を書き足したり、不要な情報を消したりする操作を行います。
PostgreSQLでは、このSQLを使って、データ操作だけでなく「誰が操作してよいか」という権限の設定も行います。
2. PostgreSQLの権限管理とは?
権限管理とは、「この人は見ていい」「この人は変更していい」といったルールを決めることです。もし誰でも自由に変更できたら、データはすぐに壊れてしまいます。
PostgreSQLでは、ユーザーごとに細かく権限を設定できます。特に重要なのが、スキーマ単位での権限管理です。
3. スキーマ単位で権限を管理する理由
スキーマは、テーブルを整理するための入れ物です。用途ごとにスキーマを分けておくと、まとめて権限を設定できます。
例えば、「一般ユーザー用のデータ」「管理者専用のデータ」を別スキーマに分けると、一般ユーザーには管理者用スキーマを見せない、という設定が可能になります。
4. 権限確認の前にテーブルの状態を見てみよう
ここでは、memberスキーマにあるusersテーブルを例にします。まずはテーブルの中身を確認します。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋次郎 | 22 | jiro@example.com
SELECT *
FROM member.users;
id | name | age | email
----+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋次郎 | 22 | jiro@example.com
5. スキーマに対する基本的な権限の種類
スキーマに対して設定できる主な権限は以下の2つです。
- USAGE:スキーマの中を見ることができる
- CREATE:スキーマの中にテーブルなどを作れる
USAGEがないと、そのスキーマにあるテーブルは存在していても使えません。
6. スキーマに権限を付与する方法(GRANT)
権限を与えるときは、GRANTというSQLを使います。例として、app_userというユーザーにmemberスキーマの使用権限を与えます。
GRANT USAGE
ON SCHEMA member
TO app_user;
GRANT
これで、app_userはmemberスキーマの中身を使えるようになります。
7. テーブル操作を許可する権限の設定
スキーマを使えるだけでは、テーブルの中身は操作できません。次に、テーブルの操作権限を付与します。
GRANT SELECT
ON member.users
TO app_user;
GRANT
この設定により、app_userはusersテーブルを「見るだけ」できるようになります。
8. 権限を取り消す方法(REVOKE)
不要になった権限は、REVOKEで取り消します。間違って権限を与えた場合も、すぐに元に戻せます。
REVOKE SELECT
ON member.users
FROM app_user;
REVOKE
これで、usersテーブルを参照する権限は失われます。スキーマ権限とテーブル権限は別物なので、それぞれ意識することが重要です。