Greenplum之桃花源(7)

Postgresql加密 pgcrypto

对数据内容的加密,通过pgcrypto可以实现

安装pgcrypto工具:
在/usr/local/greenplum-db/share/postgresql/contrib中执行:

psql -d [dbname] -f pgcrypto.sql

可以在指定数据库中使用数据加密,提供了一些加密的function

1、digest:

digest(data text, type text) returns bytea

digest(data bytea, type text) returns bytea

支持对bytea和普通文本的hash转换

2、hmac:

hmac(data text, key text, type text) returns bytea

hmac(data bytea, key text, type text) returns bytea

和digest类似,好处在于添加了key的参数
不知道的key的话,无法逆向破解原始值
而且由于第二参数的存在,也能知道是否原始值和hash值是否
被 修改。
长度大于块大小,会先hash一次,然后得到的hash值
作为key再hash一次

3、crypt和gen_salt:

digest和hmac性质还是一样,如果知道原始数据和key,hash就会一致
很容易被破解。

crypt(password text, salt text) returns text

gen_salt(type text [, iter_count integer ]) returns text

函数中当加密后的hash值作为第二个参数再进行加密操作
得到的就是此hash值
所以一般用来对密码进行加密,实现密码匹配

上面三种是不可逆加密,即无法解密

4、PGP对称加密:

pgp_sym_encrypt(data text, psw text [, options text ]) returns bytea
pgp_sym_encrypt_bytea(data bytea, psw text [, options text ]) returns bytea
pgp_sym_decrypt(msg bytea, psw text [, options text ]) returns text
pgp_sym_decrypt_bytea(msg bytea, psw text [, options text ]) returns bytea
对称加密的密钥设置为十六字节。
由于块级加密的密文可变特性,相同密钥对于相同内容的多次加密,密文是不同的
对性能的影响小,效率高,加密难以逆向破解,但是由于密钥固定,安全性不高。
示例:
加密

digoal=# select pgp_sym_encrypt('i am digoal', 'pwd', 'cipher-algo=bf, compress-algo=2, compress-level=9');
                                                                          pgp_sym_encrypt                                           
                                
------------------------------------------------------------------------------------------------------------------------------------
--------------------------------
 \xc30d0404030245811e051118cc136ed23f0198808f069b53264d4a08c2b5dcf3b1c39a34d091263f7f6b64a14808e6ffb32ccc09749105b9cc062d70c628357ab
1e2474ff6d109dd083ce892cfa55706
(1 row)

解密

digoal=# select pgp_sym_decrypt('\xc30d0404030245811e051118cc136ed23f0198808f069b53264d4a08c2b5dcf3b1c39a34d091263f7f6b64a14808e6ffb32ccc09749105b9cc062d70c628357ab1e2474ff6d109dd083ce892cfa55706'::bytea, 'pwd');

 pgp_sym_decrypt 
-----------------
 i am digoal
(1 row)

5、PGP非对称加密:

首先要使用gpg生成一对公钥和密钥. 当然你也可以生成很多对.
加密用公钥, 解密用对应的私钥即可.
公钥和私钥都可以放在客户端, 这样的话数据库中只存储加密后的数据, 攻击者获取数据后也无法对它进行解密.
非对称加密的公私钥放在服务端,发布服务的用户持有公钥,接收服务的用户持有私钥
安全性高,加密难以逆向破解,但是效率低下,对性能影响大

6、PGP对称非对称加密结合:

  1. 约定一个对称加密的密钥
  2. 建立一对非对称加密密钥
  3. 通过对称加密将原文加密存入数据库
  4. 将对称加密的密钥用非对称的公钥进行加密
  5. 将加密过后的对称密钥和非对称私钥发给对方
  6. 对方通过非对称的私钥进行解密,然后再通过解密之后的密钥,解密数据库中的数据得到原文。

对称非对称的结合主要是在保持对称加密效率的同时,提高其安全性(通过非对称加密加密其密钥)
安全性高,对性能影响小,效率高,但是侵入性强,对业务影响大。

加密的最佳实践

  1. 加密确保数据只能被拥有解密数据所需密钥的用户看见
  2. 加密和解密数据有性能代价,只加密需要加密的数据
  3. 在生产系统中实现任何加密解决方案之前先做性能测试

加密上与mysql的对比

  1. mysql:可以在表级指定密码来对数据进行加密。
    还可以使用AES_ENCRYPT和AES_DECRYPT函数
    对列数据进行加密和解密,可以通过SSL连接对网络进行加密
  2. postgresql:可以使用pgcrypto库中的函数对列进行加解密
    可以通过SSL连接实现网络加密

对于MPP中比较常见的加密方式,我们能做到:

  1. 口令存储加密:数据库用户的口令以MD5散列的方式存储。
  2. 对密码进行加密:通过hash加密的方式比对。
  3. 为指定的字段加密,数据库中的数据是以密文的形式存在。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值