在create role上创建触发器

时间:2015-02-09 19:39:54

标签: postgresql triggers plpgsql

我有一个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;

我还有一张桌子&#34; is_admin&#34;我在哪里手动添加新用户(它很少发生)。如果它是只读用户users.is_admin = false,并且是否为具有所有权限的用户users.is_admin = tru e。

   users.oid     users.is_admin (bool)
       1            true
       2            false
       3            false
      ...            ...

然后在代码中我用这个查询检查用户是否是管理员:

SELECT users.is_admin
FROM users.users
JOIN pg_authid ON pg_authid.oid = users.oid::oid
WHERE rolname = "PUT_ROLNAME";

因此,主要问题是如何自动将新用户添加到&#34; is_admin&#34;表?我读过这样的触发器或smth可以帮助我(例如,触发ON CREATE ROLE)。

1 个答案:

答案 0 :(得分:3)

您无法在管理更改上创建触发器,例如create role

但我认为你根本不需要is_admin专栏。你可以简单地使用

select pg_has_role('username', 'rolename', 'MEMBER');

确定用户是否有某种角色。