我的数据库包含 viewer :
CREATE ROLE viewer WITH NOSUPERUSER NOCREATEDB NOCREATEROLE;
以及名为 i 的数据库模式(对于 i 接口)。 模式 i 中有插入函数,即:
SELECT * FROM i.insert_machine(1,2,3);
在表data.machine中插入新行。还有一些非插入功能,例如, i.error_table(整数)应允许用户查看器执行。拨款选项包括:
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;
我仍然可以运行此方法并获得结果。
答案 0 :(得分:2)
我想我已经找到了。我必须撤销公开的执行权限,并仅选择特定的角色:
REVOKE EXECUTE ON FUNCTION i.insert_machine(integer, integer, integer) FROM public;
GRANT EXECUTE ON FUNCTION i.insert_machine(integer, integer, integer) TO writer;
答案 1 :(得分:0)
将所有者更改为其他角色。目前必须是eventviewer
。