PostgreSQL如何限制用户查看函数内容

在某些情况下,我们可能只希望普通能够使用某个函数就好了,而不希望该用户能够看到函数体内部的内容,那么我们该如何控制用户的权限呢?

例如我们可以通过编写C函数来实现,例如PG的内部函数一样:

bill@bill=>\sf+ convert
        CREATE OR REPLACE FUNCTION pg_catalog.convert(bytea, name, name)
         RETURNS bytea
         LANGUAGE internal
         STABLE PARALLEL SAFE STRICT
1       AS $function$pg_convert$function$

除此之外,我们可能需要利用一些能够对函数体加密的第三方插件了。那么还有没有什么办法能够直接实现呢?

要解决这个问题前,我们需要思考两个问题:用户查看函数体内容是从哪里查的?用户使用函数又是需要什么权限?

我们来一步步看看,pg中函数的相关信息是存在pg_proc表中的,函数体的内容存放在该表的prosrc字段中。

创建测试函数:

bill@bill=>create or replace function f1() returns int
bill-# as $$
bill$# declare
bill$# i int:=1;
bill$# begin
bill$# return i;
bill$# end;
bill$# $$language plpgsql;
CREATE FUNCTION

查看函数体:

bill@bill=>select prosrc from pg_proc where proname = 'f1';
  prosrc
-----------
          +
 declare  +
 i int:=1;+
 begin    +
 return i;+
 end;     +

(1 row)

创建普通用户,可以看到因为pg_proc的权限给了public角色,所以新建的普通用户直接就可以查询。

bill@bill=>create user r1 ;
CREATE ROLE
bill@bill=>\c - r1
You are now connected to database "bill"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值