postgresql - 创建角色时创建触发器

标签 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;

我还有一个表“is_admin”,我在其中手动添加新用户(这种情况很少发生)。如果是只读用户users.is_admin = false并且如果是拥有所有权限的用户users.is_admin = true。

   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/

相关文章:

postgresql - 在 Revel 中使用 Gorm 查询表

mysql - 允许/要求只有一个具有共同 FK 的记录具有 "primary"标志

sql - 循环遍历sql server触发器中的数据

mysql - 确保在 MySQL 中填写顺序字段

postgresql - 如何将字符串参数传递给plpgsql函数?

sql - 检测 Pl/pgSQL 函数中所有出现的 "Parameter was used more than once"

Postgresql - 不区分大小写的构建允许所有 wheres、join、group bys 等不区分大小写

database - 更改 PostgreSQL 9.1 中的编码

sql - 滞后函数不接受使用 postgres SQL 的浮点值

postgresql - 通过 RAW plpgsql 中的 UPDATE 语句获取受影响的行