【问题标题】:Database column encryption postgres数据库列加密 postgres
【发布时间】:2016-01-07 15:08:58
【问题描述】:

如何使用 pgcrypto 插件加密 postgres 数据库中的列?

我正在使用 postgres 9.3 并且我需要加密我的专栏之一,postgres 是否也支持 Aes 加密或以任何方式我可以实现它?

【问题讨论】:

  • 您还需要考虑允许哪些服务器查看解密密钥。如果您将密钥与加密数据放在同一个位置,那么,它并不会提高安全性。

标签: database postgresql encryption aes pgcrypto


【解决方案1】:

是的,Postgres pgcrypto 模块确实支持AES。所有带有示例的详细信息都可以在 here 中找到。至于示例用法:

-- add extension
CREATE EXTENSION pgcrypto;

-- sample DDL
CREATE TABLE test_encrypt(
  value TEXT
);
INSERT INTO test_encrypt VALUES ('testvalue');

-- encrypt value
WITH encrypted_data AS (
  SELECT crypt('PasswordToEncrypt0',gen_salt('md5')) as hashed_value
)
UPDATE test_encrypt SET value = (SELECT hashed_value FROM encrypted_data);

验证密码:

SELECT (value = crypt('PasswordToEncrypt0', value)) AS match FROM test_encrypt;

返回:

 match 
-------
 t
(1 row)

【讨论】:

  • 这意味着我也需要在我的应用程序代码中进行更改,是否可以在不更改应用程序级别的情况下实现它。
  • @Nitin - 好吧,很难告诉你,因为我没有看到你的身份验证实现..
  • 这不是(列)加密。加密是可逆的,而散列则不是。 SQL Server 中的示例docs.microsoft.com/en-us/sql/relational-databases/security/…
  • @Henrik,非常好的功能,我不知道.. 你有没有为 Postgre 找到这样的功能?如果是这样,请告诉我...谢谢
【解决方案2】:

上述不是加密,因为加密是可逆的,这意味着如果您加密某些秘密文本或值,您应该能够知道该秘密值或文本与散列不同的是,您想验证用户是否-提供的值与哈希值是否匹配。

这是使用pgcrypto 模块加密列数据的方式。

create extension if not exists pgcrypto; -- this will install the module if not installed 
CREATE TABLE agents (
id serial primary key,
name varchar not null
);
 
INSERT INTO agents (name) values
(pgp_sym_encrypt('Johny Smith', 'longsecretencryptionkey')),
(pgp_sym_encrypt('Bob Marley', 'longsecretencryptionkey'));

longsecretencryptionkey 

是您的加密密钥。您可以从此处encryption key generator 生成加密密钥并选择您选择的位。 建议选择最小 256 位。

请记住将加密密钥保存在安全的地方。如果您丢失了加密,您将无法再解密。理解这一点非常重要。

这就是您查询它们的方式

SELECT pgp_sym_decrypt(name::bytea, 'longsecretencryptionkey') FROM users WHERE pgp_sym_decrypt(name::bytea, 'longsecretencryptionkey') ILIKE 'johny%'; -- querying for agents whose name start with johny

您可以查看这篇对我有帮助的博客文章 https://blog.andreiavram.ro/encrypt-postgresql-column/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-02
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2021-11-10
    相关资源
    最近更新 更多