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

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐