撤消PostgreSQL中插入函数的执行权限

时间:2017-06-01 12:23:41

标签: postgresql grant

我的数据库包含 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;

我仍然可以运行此方法并获得结果。

2 个答案:

答案 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