查看原文
其他

技术干货 | 数据库安全功能之五——数据保密性

优炫软件 2020-08-29



作为应用最广泛的信息存储和处理系统,数据库中存在大量敏感数据,如何防止数据被窃取和篡改是重中之重。加密技术是提高数据库安全的一个重要手段。优炫数据库(UXDB是通过存储加密、传输加密和数据完整性来进行数据保护。需注意的是,并不是所有加密方法和方式都是适合数据库的在加密数据的同时,也会带来一些相关问题,如果处理不好不仅会降低数据库的安全性而且还会带来其它如性能的影响。



优炫数据库(UXDB)提供了几个不同级别的加密,并且在保护数据不会因为数据库服务器偷窃、不道德的管理员、不安全网络等因素而泄漏。像是医疗记录或财务交易等敏感数据都是要求设置保密。


全库加密


全库加密即整个数据库加密,也就是对数据库中所有的系统表、数据表、索引、视图和存储过程等进行加密处理。这种加密方法简单快捷,只需对相应数据库文件进行加密处理即可。对于企业或者用户简单的备份整个数据库,这种全库加密的操作是非常方便的。与此同时因为数据库中数据共享性高,会同时被多个用户和应用访问使用,因此全库加密会对系统性能会产生一定的影响。

那么如何进行全库加密呢?很简单,只需在初始化的时候加上-M参数就可以进行全库加密。创建对象并插入数据,通过查看数据文件中的数据是否是密文来验证全库加密。

1)初始化集群时用参数M指定对存储文件加密,并启动

./initdb -k -M -W -D uxdb_enc

./ux_ctl -M -D uxdb_enc

2)登录控制台,创建表并插入数据

CREATE TABLE sjjm(no int, name varchar(32));

INSERT INTO sjjm VALUES(1, 'pizza');

INSERT INTO sjjm VALUES(2, 'sandwich');

CHECKPOINT;

3)查询表文件的路径

SELECT ux_relation_filepath('sjjm')

4)进入集群目录查看表文件


口令加密


通常默认情况下,优炫数据库(UXDB)用户的口令以 MD5 哈希的方式存储,所以管理员是无法判断赋予用户的实际口令。如果 MD5 被加密用于客户端认证,那么未加密的口令是不可能临时出现在服务器上,因为客户端在透过网络发送口令之前,就先用 MD5 加密处理过。


1)登录加密数据库创建用户并设定密码

create user test password '1qaz!QAZ';

2)查看密码

select usename,passwd from ux_shadow ;


指定列加密


uxcrypto模块允许对特定域进行加密存储。这个功能只对某些敏感数据有用。客户端需提供解密的密钥,然后数据在服务器端解密并发送给客户端。在数据被解密和在服务器与客户端之间传递时,解密数据和解密密钥将会在服务器端存在短暂的一段时间。这就给那些能完全访问数据库服务器的人提供了一个短暂的截获密钥和数据的时间,例如系统管理员。


1)登录加密数据库加载uxcrypto插件

CREATE EXTENSION uxcrypto;

2)创建测试表

CREATE TABLE sjjm_01(id int, name varchar(64), pwd varchar(128));

3)以不同的加密方式插入数据

INSERT INTO sjjm_01 VALUES (1, 'zhang',digest('1qaz!QAZ','md5'));

INSERT INTO sjjm_01 VALUES (2, 'wang',digest('1qaz!QAZ','sha1'));

INSERT INTO sjjm_01 VALUES (3, 'huang', encrypt('1qaz!QAZ','aa','aes'));

4)查看表

SELECT * FROM sjjm_01;

⚠️aes是可逆加密

SELECT convert_from(decrypt('\xa998f73e7f15a1895bf3a863e4eadbb9','aa','aes'),'SQL_ASCII');


其他储存加密


除了上述说的几种加密方式外,还有跨网络加密口令、跨网络加密数据和SSL主机认证。

跨网络加密口令

MD5认证方法在将口令发送给服务器之前由客户端对它进行双重加密。第一次 MD5 加密是基于用户名的,然后在建立数据库连接时,服务器再次加密口令。通过网络传递给服务器的就是这个双重加密的值。这样的双重加密不仅可以防止口令被发现,还可以防止稍后另一个连接使用同样的加密口令连接数据库。


跨网络加密数据

SSL 连接加密所有跨网络发送的数据、口令、查询以及返回的数据。ux_hba.conf文件允许管理员指定某些主机可以使用非加密连接(host),以及某些主机需要使用 SSL 加密的连接(hostssl)。客户端还可以指定它们只通过 SSL 连接到服务器,也可以使用Stunnel或SSH加密传输。


SSL主机认证

客户端和主机都可以提供 SSL 证书给对方。这在两边都需要一些额外的配置, 但是这种方式是比仅使用口令更强的身份验证。它避免一个计算机伪装成服务器,而且时长只要足够读取客户端发送的口令就行了。它还避免了“中间人”攻击,在其中有一台计算机处于客户端和服务器之间并伪装成服务器读取和传递两者之间的所有数据。


传输加密


优炫数据库(UXDB)通过SSL加密传输,当使用SSL加密传输的时候,在UXDB集群目录下存放CA证书、服务器证书和服务器密钥。同时在配置文件uxsinodb.conf中打开ssl开关。远程传输即可实现加密。

生成ssl证书

1) 生成server请求证书

openssl req -new -text -out server.req

(PEM pass phrase不能为空,如输入123456,其他可以为空)

2) 生成用口令保护的密钥,并解锁

openssl rsa -in privkey.pem -out server.key

(输入上面输入的PEM pass phrase)

rm privkey.pem

3) 把证书变成自签名证书。

openssl req -x509 -in server.req -text -key server.key -out server.crt

4) 提高密钥权限

chmod og-rwx server.key


配置uxdb服务器,打开ssl开关,重启集群

vim uxsinodb.conf

ssl=on


验证

远程连接

uxsql "sslmode=require host=ip user=uxdb port=port dbname=uxdb"

在远程端口进行操作,比如插入数据。

通过wireshark进行抓包。查看是否可以抓到传输的数据。



-FIN-

D

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存