db2 如何回收名子为‘=‘的function的execute权限?

db2中有些函数名子比较奇观,是 '=', '<', '>' 等。这些函数由于同名的函数不止一个,可能会导致权限回收的时候产生一些问题,比如:

db2tst@NODE01:~> db2 "select varchar(FUNCSCHEMA,10) as FUNCSCHEMA, varchar(FUNCNAME,10) as FUNCNAME, varchar(SPECIFICNAME,30) as SPECIFICNAME from syscat.functions where funcname='=' and FUNCSCHEMA='SYSPROC' "

FUNCSCHEMA FUNCNAME   SPECIFICNAME                 

---------- ---------- ------------------------------

SYSPROC    =          SQL200703111424938           

SYSPROC    =          SQL200703111424947           

 

  2 record(s) selected.

 

db2tst@NODE01:~> db2 "select * from sysibmadm.privileges where objectname in ('SQL200703111424947') and AUTHID='PUBLIC'"

AUTHID      AUTHIDTYPE PRIVILEGE   GRANTABLE OBJECTNAME           OBJECTSCHEMA       OBJECTTYPE             

----------- ---------- ----------- --------- -------------------- ------------------ ------------------------         

PUBLIC      G          EXECUTE     N         SQL200703111424947   SYSPROC            FUNCTION               

                                                                 

  2 record(s) selected.

 

问题是,如何从PUBLIC撤销这个函数的执行权限?

 

直接 REVOKE EXECUTE ON FUNCTION SYSPROC.'=' FROM PUBLIC 是不行的,会报错SQL0476N,因为函数名有重复,只是参数不同,所以得指定参数格式。但是我们又不知道如何指定

db2tst@NODE01:~> db2 "REVOKE EXECUTE ON FUNCTION SYSPROC.\"=\" FROM PUBLIC"

DB21034E  The command was processed as an SQL statement because it was not a

valid Command Line Processor command.  During SQL processing it returned:

SQL0476N  Reference to routine "SYSPROC.=" was made without a signature, but

the routine is not unique in its schema.  SQLSTATE=42725

 

这时候可以使用 revoke SPECIFIC FUNCTION,使用它对应的 SPECIFICNAME 来撤销:

db2tst@NODE01:~> db2 -v "revoke execute on SPECIFIC FUNCTION SYSPROC.SQL200703111424947 from PUBLIC restrict"

revoke execute on SPECIFIC FUNCTION SYSPROC.SQL200703111424947 from PUBLIC restrict

DB20000I  The SQL command completed successfully.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值