PostgreSQL権限管理入門
GRANT/REVOKEでアクセスを制御する
PostgreSQLのGRANT/REVOKEを使った権限の付与・取り消し、ロール管理を解説します。
こんな人向けの記事です
- データベースのアクセス権限を管理したい人
- GRANT/REVOKEの使い方を知りたい人
- ロールベースの権限管理を理解したい人
Step 1権限管理の基本
PostgreSQLでは、データベースオブジェクトへのアクセスは権限(privilege)で制御されます。
| 権限 | 説明 |
|---|---|
| SELECT | データの読み取り |
| INSERT | データの追加 |
| UPDATE | データの更新 |
| DELETE | データの削除 |
| ALL PRIVILEGES | 全権限 |
| USAGE | スキーマへのアクセス |
| CREATE | オブジェクトの作成 |
Step 2GRANTで権限を付与
SQL
-- テーブルへの権限付与
GRANT SELECT, INSERT ON users TO app_user;
-- 全権限を付与
GRANT ALL PRIVILEGES ON users TO admin_user;
-- スキーマ内の全テーブルへの権限
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;
-- データベースへの接続権限
GRANT CONNECT ON DATABASE mydb TO app_user;
-- スキーマの使用権限
GRANT USAGE ON SCHEMA public TO app_user;
Step 3REVOKEで権限を取り消し
SQL
-- 特定の権限を取り消し
REVOKE INSERT, UPDATE ON users FROM app_user;
-- 全権限を取り消し
REVOKE ALL PRIVILEGES ON users FROM app_user;
-- 全テーブルから権限を取り消し
REVOKE SELECT ON ALL TABLES IN SCHEMA public FROM readonly_user;
Step 4ロールによるグループ管理
ロールを使ってユーザーをグループ化し、まとめて権限を管理できます。
SQL
-- グループロールの作成
CREATE ROLE developers;
-- グループに権限を付与
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA public TO developers;
-- ユーザーをグループに追加
GRANT developers TO tanaka;
GRANT developers TO suzuki;
-- グループからユーザーを削除
REVOKE developers FROM suzuki;
ポイント: ロールベースの管理を使うと、ユーザーの追加・削除時に個別のテーブル権限を設定する必要がなくなります。
Step 5権限の確認
SQL
-- テーブルの権限を確認
\dp users
-- ユーザー一覧とロール確認
\du
-- 今後作成されるテーブルへのデフォルト権限
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO readonly_user;
注意: 本番環境では最小権限の原則を守り、必要最小限の権限のみを付与してください。