【PostgresSQL】ロールの作成
はじめに
PostgresSQLのロールを作成する機会があったので、その際の作業記録を残します。
やった事
- ロールの作成
- SQLファイルから実行
- ロールの削除
ロールの作成
以下のパターンのユーザを作成しました。
- 読み取り専用
- 読み取り+書き込み
- 読み取り+特定テーブルの書き込み
- 読み取り+書き込み可+DB作成権限 ※ログイン不可
GRANT:既存のDBに権限を付与します。
ALTER DEFAULT PRIVILEGES:デフォルトのアクセス権限を定義します。作成済のDBに権限は付与されません。
読み取り専用
CREATE ROLE db_readerWITH LOGIN PASSWORD 'db_reader';
GRANT SELECT ON ALL TABLES IN SCHEMA public TO db_reader;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO db_reader;
読み取り+書き込み
CREATE ROLE db_writerWITH LOGIN PASSWORD 'db_writer';
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO db_writer;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO db_writer;
読み取り+特定テーブルの書き込み
CREATE ROLE db_specific_writer WITH LOGIN PASSWORD 'db_specific_writer';
GRANT SELECT ON ALL TABLES IN SCHEMA public TO db_specific_writer;
GRANT UPDATE ON something_table TO db_specific_writer;
読み取り+書き込み+DB作成
CREATE USER db_user WITH LOGIN CREATEDB PASSWORD 'db_user';
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO db_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO db_user;
SQLファイルから実行
cd C:\Program Files\PostgreSQL
psql -U postgres -h localhost -f "C:\Temp\test.sql"
と実行すればsqlファイルの内容を実行できるのですが、パスワードを求められてしまいますため、バッチファイルにする際に不便です。
Windowsの場合、以下でパスワード無しでpsqlを実行できます。
pgpass.confの作成
C:\Users\myuser\AppData\Roaming\postgresql にpgpass.conf を作成します。
pgpass.confの中身は以下のようになります。
localhost:5432:database:postgres_user:postgres_password
これでpsql時にパスワードを求められなくなります。
ロールの削除
REVOKE ALL ON ALL TABLES IN SCHEMA public FROM db_user;
DROP ROLE db_user;
ロールを削除する前に、REVOKEで権限を取り消しておかないと削除できません。
ALTER DEFAULT PRIVILEGESを付与している場合は以下のようになります。
REVOKE ALL ON ALL TABLES IN SCHEMA public FROM db_user;
DROP OWNED BY db_user;
DROP ROLE db_user;
2行目のDROP OWNED BY db_user;を実行する際は、BY句の後に指定しているユーザ(この例だとdb_user)で実行する必要があります。
ディスカッション
コメント一覧
まだ、コメントがありません