1.函数定义ACL测试
以用户A创建函数:

CREATE FUNCTION calculate_tax(amount numeric)
RETURNS numeric
LANGUAGE plpgsql
AS BEGINRETURNamount∗0.1;END; BEGIN RETURN amount * 0.1; END; BEGINRETURNamount0.1;END;;

收回权限:
REVOKE ALL ON FUNCTION calculate_tax FROM PUBLIC;

此时以用户B执行:
select calculate_tax(10); //发现权限不足

此时以用户A授权给B:
GRANT EXECUTE ON FUNCTION calculate_tax TO B;

再以用户B执行,发现可以。

2.INVOKE测试

以用户A创建test数据表
create table test(id int);

以别的用户以INVOKE模式创建函数==
CREATE FUNCTION get_test_id(emp_id INT)
RETURNS numeric
SECURITY INVOKER
LANGUAGE SQL
AS SELECTidFROMtestWHEREid=empid; SELECT id FROM test WHERE id = emp_id; SELECTidFROMtestWHEREid=empid;;

==以用户B执行函数=
SELECT get_test_id(1);

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐