撤销对 PostgreSQL 中插入函数的执行权限
Revoke execute privileges on insertion functions in PostgreSQL
我的数据库角色为 viewer:
CREATE ROLE viewer WITH NOSUPERUSER NOCREATEDB NOCREATEROLE;
以及名为 i 的数据库模式(至于 i 接口)。
模式 i 中有插入函数,即:
SELECT * FROM i.insert_machine(1,2,3);
在 table data.machine 中插入新行。还有一些非插入函数,例如i.error_table(integer) 应允许用户查看器执行。资助选项是:
GRANT USAGE ON SCHEMA i TO viewer;
GRANT SELECT ON ALL TABLES IN SCHEMA i TO viewer;
我想禁止用户查看器调用这些 insert_* 方法。我应该怎么做?如果我都尝试:
REVOKE ALL ON FUNCTION i.insert_machine(int, int, int) FROM viewer;
REVOKE EXECUTE ON FUNCTION i.insert_machine(int, int, int) FROM viewer;
我仍然能够运行这个方法并得到结果。
将所有者更改为其他角色。目前必须是eventviewer
。
我想我已经找到了。我必须撤销 public 的执行权并仅选择加入特定角色:
REVOKE EXECUTE ON FUNCTION i.insert_machine(integer, integer, integer) FROM public;
GRANT EXECUTE ON FUNCTION i.insert_machine(integer, integer, integer) TO writer;
我的数据库角色为 viewer:
CREATE ROLE viewer WITH NOSUPERUSER NOCREATEDB NOCREATEROLE;
以及名为 i 的数据库模式(至于 i 接口)。 模式 i 中有插入函数,即:
SELECT * FROM i.insert_machine(1,2,3);
在 table data.machine 中插入新行。还有一些非插入函数,例如i.error_table(integer) 应允许用户查看器执行。资助选项是:
GRANT USAGE ON SCHEMA i TO viewer;
GRANT SELECT ON ALL TABLES IN SCHEMA i TO viewer;
我想禁止用户查看器调用这些 insert_* 方法。我应该怎么做?如果我都尝试:
REVOKE ALL ON FUNCTION i.insert_machine(int, int, int) FROM viewer;
REVOKE EXECUTE ON FUNCTION i.insert_machine(int, int, int) FROM viewer;
我仍然能够运行这个方法并得到结果。
将所有者更改为其他角色。目前必须是eventviewer
。
我想我已经找到了。我必须撤销 public 的执行权并仅选择加入特定角色:
REVOKE EXECUTE ON FUNCTION i.insert_machine(integer, integer, integer) FROM public;
GRANT EXECUTE ON FUNCTION i.insert_machine(integer, integer, integer) TO writer;