在创建角色时创建触发器
Create trigger on create role
我有一个 PostgreSQL 数据库。我创建新的 READ-ONLY 用户如下:
$ 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;
我还有一个 table "is_admin" 手动添加新用户的地方(这种情况很少发生)。如果它是只读用户 users.is_admin = false
并且它是具有所有权限的用户 users.is_admin = tru
e.
users.oid users.is_admin(布尔值)
1 真
2 错误
3 假
……
然后在代码中我用这个查询检查用户是否是管理员:
SELECT users.is_admin
FROM users.users
JOIN pg_authid ON pg_authid.oid = users.oid::oid
WHERE rolname = "PUT_ROLNAME";
所以,主要问题是如何自动添加新用户到"is_admin"table?我读到触发器或类似的东西可以帮助我(例如,触发创建角色)。
您不能在管理更改时创建触发器,例如 create role
。
但我认为您根本不需要 is_admin
列。你可以简单地使用
select pg_has_role('username', 'rolename', 'MEMBER');
确定用户是否具有某种角色。
我有一个 PostgreSQL 数据库。我创建新的 READ-ONLY 用户如下:
$ 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;
我还有一个 table "is_admin" 手动添加新用户的地方(这种情况很少发生)。如果它是只读用户 users.is_admin = false
并且它是具有所有权限的用户 users.is_admin = tru
e.
users.oid users.is_admin(布尔值) 1 真 2 错误 3 假 ……
然后在代码中我用这个查询检查用户是否是管理员:
SELECT users.is_admin
FROM users.users
JOIN pg_authid ON pg_authid.oid = users.oid::oid
WHERE rolname = "PUT_ROLNAME";
所以,主要问题是如何自动添加新用户到"is_admin"table?我读到触发器或类似的东西可以帮助我(例如,触发创建角色)。
您不能在管理更改时创建触发器,例如 create role
。
但我认为您根本不需要 is_admin
列。你可以简单地使用
select pg_has_role('username', 'rolename', 'MEMBER');
确定用户是否具有某种角色。