PostgreSQL 加密存储过程示例

PostgreSQL 加密存储过程示例,第1张

概述很多朋友询问如何加密PostgreSQL的存储过程,做了一个简单示例。目前考虑,一种加密方式是使用C语言编译成库文件,缺点是维护起来比较麻烦,优点是速度非常快。另一种是将存储过程以密文存储,使 pg_proc系统表中的 prosrc 不可读,编写起来比较麻烦,好处是一劳永逸。 密文存储过程也可以有两种实现方式,一种是创建函数时将函数转换成密文,这种方式如果不修改内核,无法直接在创建时生成,好在作为

很多朋友询问如何加密Postgresql的存储过程,做了一个简单示例。目前考虑,一种加密方式是使用C语言编译成库文件,缺点是维护起来比较麻烦,优点是速度非常快。另一种是将存储过程以密文存储,使 pg_proc系统表中的 prosrc 不可读,编写起来比较麻烦,好处是一劳永逸。

密文存储过程也可以有两种实现方式,一种是创建函数时将函数转换成密文,这种方式如果不修改内核,无法直接在创建时生成,好在作为开源软件的一大好处,这个我们是可以做到的,本次不对此进行讨论。另一种使用外部程序在创建之前将代码转换成密文,然后正常使用CREATE FUNCTION创建,这个需要做的是创建一个新的过程语言引擎。

EnterpriseDB已经有类似实现:
http://www.enterprisedb.com/docs/en/9.0/oracompat/Postgres_Plus_Advanced_Server_Oracle_Compatibility_Guide-195.htm

Oracle的实现:
http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/wrap.htm

我的实现是很简陋的,只能算程序可行性证明,如果想用在生产环境,还需要更多增强:
1、加密只是简单的字母调换,只支持ASCII码;
2、密文是一次性转换并保存在内存中,容易通过其它方式读出来。如果改成流加密,一边解密一边编译,把编译过的部分清掉,还能提高安全性;
3、报错信息没有修改,如果有编译错误,报错时会把一些源代码带出来;
4、只能加密函数体部分,全部转换需要修改内核语法解析部分(就像EDB所做的);
5、没有准备windows平台,只有linux;

源代码代码下载链接:
http://url.cn/M1ka7U
由前几天的git分支改写,包含PL/pgsql源代码目录用来做比较。

1、pl_wrap srcfile [outfile]
srcfile里只包含函数体部分,输出加密后的密文
2、创建存储过程语言模板
INSERT INTO pg_pltemplate values('plpgwrappedsql',true,
'plpgwrappedsql_call_handler',null,'plpgwrappedsql_valIDator','$libdir/plpgwrappedsql',null);
3、创建过程语言
CREATE LANGUAGEplpgwrappedsql;
4、创建函数
CREATE FUNCTION func_name() RETURNS type AS
$$
<<密文过程>>
$$
LANGUAGEplpgwrappedsql;

总结

以上是内存溢出为你收集整理的PostgreSQL 加密存储过程示例全部内容,希望文章能够帮你解决PostgreSQL 加密存储过程示例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1176922.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存