Pet*_*man 1 postgresql triggers plpgsql
我有一个 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;
Run Code Online (Sandbox Code Playgroud)
我还有一个表“is_admin”,我在其中手动添加新用户(这种情况很少发生)。如果它是只读用户users.is_admin = false并且它是具有所有特权的用户users.is_admin = true.
users.oid users.is_admin (bool)
1 真
2 假
3 假
……
然后在代码中,我使用此查询检查用户是否为管理员:
SELECT users.is_admin
FROM users.users
JOIN pg_authid ON pg_authid.oid = users.oid::oid
WHERE rolname = "PUT_ROLNAME";
Run Code Online (Sandbox Code Playgroud)
那么,主要问题是如何自动将新用户添加到“is_admin”表中?我读过那个触发器或类似的东西可以帮助我(例如,触发器 ON CREATE ROLE)。
您不能在管理更改时创建触发器,例如create role.
但我认为你根本不需要is_admin专栏。你可以简单地使用
select pg_has_role('username', 'rolename', 'MEMBER');
Run Code Online (Sandbox Code Playgroud)
确定用户是否具有某些角色。
| 归档时间: |
|
| 查看次数: |
501 次 |
| 最近记录: |