跳转至

存储加密

数据存储加密

透明加密技术是近年来针对企业文件保密需求应运而生的一种文件加密技术。是指对使用者来说是无感知的。当使用者在打开或编辑指定文件时,系统将自动对未加密的文件进行加密,对已加密的文件自动解密。文件在硬盘上是密文,在内存中是明文。一旦离开使用环境,由于应用程序无法得到自动解密的服务而无法打开,从而起来保护文件内容的效果。

如果DBA不能或不希望在数据机密性方面依赖于文件系统,则可以使用集群加密。如果启用了这个特性,Seabox将数据(关系和提前写日志)写入磁盘时进行加密,读取时解密。加密是透明的,因此应用程序看不到加密和未加密集群之间的区别。

加密等级

集簇级加密,对整个集簇进行加密,初始化时确定集簇是否加密

加密算法

使用分组加密算法AES

密钥管理

密钥管理是一个重要的方面。要加密数据库实例,必须从某个地方获得密钥。关键来自一个灵活的外部程序。理想情况下,密钥不是来自本地文件系统,而是来自远程安全密钥存储库。

要创建透明数据加密,使用选项-K调用initdb,并使用将检索加密密钥的命令的路径。例如:

$ initdb -D /somewhere/data -K /somewhere/provide_key.sh

这里的/somewhere/provide_key.sh是一个可执行文件,它将加密密钥写入其标准输出并返回零。

加密密钥需要采用十六进制格式,每个字节两个字符(十六进制数字)。由于目前使用的密钥长度为16字节(128位),所以密钥字符串的预期长度为32个字符。如下所示:

% cat /somewhere/provide_key.sh 
#!/bin/sh 
echo 882fb7c12e80280fd664c69d2d636913

initdb最终将加密密钥命令放入seaboxsql.conf文件中,作为encryption_key_command参数的值。这可以确保您不需要在每次启动服务器时将其传递给sd_ctl。

一旦服务器开始运行,客户端应用程序应该不会发现与未加密的集群有什么区别,除了设置了 data_encryption变量之外.

加密是否成功?
  • 使用sd_controldata提取一些有用的信息
$ sd_controldata data | grep -i encryp 
Data encryption: on 
Data encryption fingerprint: 740A905130FE614CE0BE36B612157A09
  • 查看data_encryption是否开启
test=# show data_encryption ; 
data_encryption 
----------------- 
on
(1 row)