PostgreSQL

PostgreSQL権限管理入門|GRANT/REVOKEでアクセスを制御する

PostgreSQL 権限管理 GRANT / REVOKE

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;

注意: 本番環境では最小権限の原則を守り、必要最小限の権限のみを付与してください。