Chinaunix首页 | 论坛 | 博客
  • 博客访问: 208873
  • 博文数量: 21
  • 博客积分: 1546
  • 博客等级: 上尉
  • 技术积分: 290
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-10 14:54
文章分类

全部博文(21)

文章存档

2020年(1)

2019年(3)

2015年(2)

2014年(1)

2011年(1)

2009年(7)

2008年(4)

2007年(2)

我的朋友

分类:

2007-04-19 14:44:28

POSTGRESQL(以下简称PG)是功能强大的开源数据库,在*NUX下表现出色,性能不逊于ORACLE。更主要的是它提供源代码,而且可进行自行修改,用于商业目的。

PG的存储过程统一以函数形式存在,调用的时候用SELECT FUNCTION_NAME(ARG...) 或 SELECT OUT_ARG FROM FUNCTION_NAME(IN_ARG...)形式,而不是用CALL语句。PG的函数有各种接口,如C,SQL,PLPGSQL、PLJAVA等,其中PLPGSQL功能最强,应用最广泛。

PG的系统表PG_CATALOG.PG_PROC存储着所有函数(包括内置函数)的各种定义,其中PLPGSQL的函数体是以源代码的形式存在,并对任何用户可读。因为PG对FUNCTION的GRANT权限只有EXCUTE项,没有SELECT项,所以任何最低权限的用户都可读到PLPGSQL函数的源代码,即使它没有执行权限。这导致业务流程的泄露。

若要阻止未经授权的用户偷窥函数代码,必须取消PG_CATALOG.PG_PROC系统表的全可读权限,改为某个角色可读,注意可读权限和可执行权限是不相关的。

请用PG的超级权限(默认为POSTGRES)进入:

 REVOKE ALL  ON pg_catalog.pg_proc   FROM  PUBLIC

GRANT SELECT ON pg_catalog.pg_proc  TO  XXX    -- XXX为可读的角色

这将阻止未经授权的用户偷窥函数代码,但超级用户和授权用户还是可以看到的。假如你是业务系统的设计商,不想让客户看到你所设计的函数代码,那只有加密了,那PG又是如何解密的呢?只能通过修改数据库源代码,重新定制数据库才能解决,

请关注我的BLOG,不日将写《如何加密POSTGRESQL的存储过程》

阅读(3283) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

chinaunix网友2010-04-25 23:11:51

可是这样取消select权限后,用户从pgadmin登录后连表也看不到了(该用户有表的All权限)。能否既隐藏存储过程,又不影响用户对表的可见性呢? 正在学习postgresql,谢谢trainee!