-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdb_setup.sql
More file actions
25 lines (21 loc) · 1.09 KB
/
db_setup.sql
File metadata and controls
25 lines (21 loc) · 1.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
-- ストアドプロシージャ専用のユーザーを作成(passswordあり)
CREATE ROLE db_admin_user WITH LOGIN PASSWORD :'db_admin_password';
-- このユーザーにはスーパーユーザー権限を付与しない
REVOKE ALL ON SCHEMA public FROM db_admin_user;
-- ストアドプロシージャ
CREATE OR REPLACE FUNCTION create_docker_app_user(username TEXT, userpass TEXT) RETURNS VOID AS $$
BEGIN
-- ユーザーが存在しない場合にのみ作成
IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = username) THEN
EXECUTE format('CREATE ROLE %I WITH LOGIN PASSWORD %L CREATEDB;', username, userpass);
RAISE NOTICE 'User % created.', username;
ELSE
RAISE NOTICE 'User % already exists.', username;
END IF;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
-- 関数の所有者(作成者)の権限を確認
ALTER FUNCTION create_docker_app_user(TEXT, TEXT) OWNER TO postgres;
-- 実行権限をdb_admin_userに付与
GRANT EXECUTE ON FUNCTION create_docker_app_user(TEXT, TEXT) TO db_admin_user;
REVOKE EXECUTE ON FUNCTION create_docker_app_user(TEXT, TEXT) FROM PUBLIC;