我有一个 PostgreSQL 数据库。我创建新的只读用户,如下所示:
$ sudo -upostgres psql postgres
postgres=# CREATE ROLE readonly;
postgres=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
postgres=# BEGIN;
postgres=# CREATE ROLE "<PUT_READONLY_USERNAME_HERE>" WITH LOGIN ENCRYPTED PASSWORD '<USE_A_NICE_STRONG_PASSWORD_PLEASE' IN ROLE readonly;
postgres=# COMMIT;
我还有一个表“is_admin”,我在其中手动添加新用户(这种情况很少发生)。如果是只读用户users.is_admin = false
并且如果是拥有所有权限的用户users.is_admin = tru
e。
users.oid users.is_admin (bool) 1 true 2 false 3 false ... ...
Then in code I check if user is admin or not with this query:
SELECT users.is_admin
FROM users.users
JOIN pg_authid ON pg_authid.oid = users.oid::oid
WHERE rolname = "PUT_ROLNAME";
那么,主要问题是如何自动将新用户添加到“is_admin”表中?我读到那个触发器或类似的东西可以帮助我(例如,在 CREATE ROLE 上触发)。
最佳答案
您无法在管理变更时创建触发器,例如创建角色
。
但我认为您根本不需要 is_admin
列。您只需使用
select pg_has_role('username', 'rolename', 'MEMBER');
确定用户是否具有某种角色。
关于postgresql - 创建角色时创建触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28417885/