我是PostgreSQL的新手。我从教程中读到了。我可以成功SELECT
,INSERT
,DELETE
和UPDATE
数据(我知道这只是一个基本部分)。
我现在的问题是加密数据。我正在寻找教程,但我没有找到我的问题的答案。我在“执行任意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
我该如何获得此功能?
到目前为止,正如我所读到的,他们只展示了如何使用它的代码。
答案 0 :(得分:4)
您引用的encrypt
功能大概是来自the bundled pgcrypto
extension的encrypt(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版本。