找不到PostgreSQL加密功能

时间:2014-09-01 07:03:46

标签: php postgresql

我是PostgreSQL的新手。我从教程中读到了。我可以成功SELECTINSERTDELETEUPDATE数据(我知道这只是一个基本部分)。

我现在的问题是加密数据。我正在寻找教程,但我没有找到我的问题的答案。我在“执行任意SQL”中尝试此代码(编辑:在PgAdmin-III?其他一些工具?)。

INSERT INTO "admin" ("email_address", "password", "role_type", "status") 
VALUES ('encrypt(''sdf'', digest(''secret2'', ''sha256''), ''aes'') ', 'sd', 'admin', 'Active')

但我得到的结果就是这个

ERROR: function encrypt(unknown, unknown) does not exist

我该如何获得此功能?

到目前为止,正如我所读到的,他们只展示了如何使用它的代码。

2 个答案:

答案 0 :(得分:4)

您引用的encrypt功能大概是来自the bundled pgcrypto extensionencrypt(bytea, bytea, text)

有关使用详情,请参阅上面链接的文档。

加载扩展程序:

CREATE EXTENSION pgcrypto;

作为超级用户。

但实际上,有用的加密并不像调用encrypt函数那么简单。你在哪里存放钥匙?数据库服务器是否安全(如果是,为什么要加密数据)?攻击者可以包裹或替换encrypt函数来窃取密钥吗?他们可以启用查询日志记录并从服务器日志中窃取密钥吗?触发导致语句被记录的错误并从错误消息中窃取密钥?等

正确的加密不仅仅是在代码上缩小一些加密秘密问题。您需要分析您想要防御的可能攻击者,想要防御的攻击者,以及他们的能力。然后根据攻击者的假设能力以及您愿意承担的成本/不便/停机/风险来设置合适的系统。

答案 1 :(得分:0)

这些函数是外部模块pgcrypto的一部分,您必须在要使用这些函数的数据库上启用它。

安装postgresql后,运行以下命令:

psql -d <database> -f /usr/share/postgresql/<version>/contrib/pgcrypto.sql

其中<database>是您正在使用的数据库的名称,<version>是您安装的postgresql版本。