postgresql的plpgsql存储过程(函数)是以明文存储在系统表pg_catalog.pg_proc中,并且是所有的用户可读。可通过以下命令取消所有用户可读
REVOKE ALL ON pg_catalog.pg_proc FROM PUBLIC
但超级用户还是可以读到明文,如果要不泄露明文,只有加密该存储过程,但postgresql不象SQL server那样提供加密存储过程的功能。要做到这一点,只有自己修改postgresql源代码,重新编译,以达到这要求
先说一下postgresql的存储过程的调用过程,对于每一个连接:
A。第一次运行plpgsql存储过程时,找出存储过程的明文,
B。进行编译,将编译中间结果存储在系统的HASH表中
C。再执行HASH表中已编译的中间结果
D。第二次运行存储过程时,就直接执行中间结果。
假如我们对存储过程的明文进行对称加密,将密文存储系统表pg_catalog.pg_proc中,在执行A和B之间,再将密文解密为明文,就可以达到要求。
阅读(4006) | 评论(0) | 转发(0) |