📢📢📢📣📣📣
作者:IT邦德
中国DBA联盟(ACDU)成员,10余年DBA工作经验,
Oracle、PostgreSQL ACE
CSDN博客专家及B站知名UP主,全网粉丝10万+
擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复,
安装迁移,性能优化、故障应急处理
文章目录
- 1.客户端接入认证
- 2.三权分立
- 3.行级访问
- 4.数据库审计
- 5.密态等值查询
- 6.透明数据加密
- 7.账本数据库
- 总结
还在睡梦中,被项目组的同事一个电话吵醒!部署在云服务器的PostgreSQL,竟然没被黑客攻击了!
瞬间人麻了,顿时给我敲响了一个警钟,数据库安全管理不是等开发好项目上线后才考虑,而是在项目落地的那一刻起就要重视起来,打战粮草先行,开发安全先做,话不多说,接下来给大家分享一下PG数据库安全管理。
当前数据库数据面临的威胁模型如下:
1.客户端接入认证
数据库用户接入安全(客户端接入认证),是确保只有通过授权的客户端才可访问数据库系统的关键安全措施之一。
可用SSL进行安全的TCP/IP连接。SSL协议是安全性更高的协议标准,它加入了数字签名和数字证书来实现客户端和服务器的双向身份验证,保证了通信双方更加安全的数据传输。
SSL证书需要提前从CA认证中心申请正式的服务器证书、客户端证书和密钥。
单向SSL认证连接配置方式:
1)安装openssl
yum -y install openssl openssl-devel
2)编译安装时指定开启ssl
./configure --prefix=/pgccc/pgsql-16.4 --with-openssl
验证和证实你编译的系统是否带openssl
pg_config --configure | grep openssl
3)创建自签名证书
先要为服务器创建一个有效期为365天的简单自签名证书:
openssl req -new -x509 -days 365 -nodes -text -out server.crt \
-keyout server.key -subj "/CN=pgccc.centos"
修改权限:
chmod og-rwx server.key 或者 chmod 0600 server.key
4)修改postgreql.conf配置文件
vi $PGDATA/postgresql.conf
ssl=on
ssl_cert_file='/home/postgres/server.crt'
ssl_key_file='/home/postgres/server.key'
5)验证连接
postgres=# select pg_reload_conf();
psql "host=192.168.3.8 user=postgres dbname=postgres sslmode=require"
psql postgresql://postgres:123456@192.168.3.8:5432/postgres?sslmode=require
2.三权分立
在实际业务管理中,为了避免系统管理员拥有过度集中的权利带来高风险,可以设置三权分立。将系统管理员的部分权限分立给安全管理员和审计管理员,形成系统管理员、安全管理员和审计管理员三权分立。
3.行级访问
行级访问控制特性将数据库访问控制精确到数据表行级别,使数据库达到行级访问控制的能力。
不同用户执行相同的SQL查询操作,读取到的结果是不同的。
用户可以在数据表创建行访问控制(Row Level Security)策略
--创建表test,包含不同用户数据信息
postgres=# CREATE TABLE test
(id int, role varchar(100), data varchar(100));
--打开行访问控制策略开关
postgres=# ALTER TABLE test ENABLE ROW LEVEL;
--创建行访问控制策略,当前用户只能查看用户自身的数据
postgres=# CREATE ROW LEVEL SECURITY POLICY test_rls
ON test USING(role = CURRENT_USER);
4.数据库审计
PostgreSQL数据库提供安全审计功能,对数据库自身和用户的行为进行监控与审计。因审计会降低数据库性能,所以要限制审计的范围,尽量减少审计的事件的数目。
制定审计策略时,请参考如下建议:
1、明确审计目的;
2、审计的命令、对象、用户尽可能少;
3、先泛后精;
4、保护审计踪迹。
5.密态等值查询
PostgreSQL数据库中的密态等值查询是一种安全计算技术,允许在加密的数据上执行查询操作而无需解密数据。这意味着数据库可以在保持数据加密状态的同时,执行一些查询操作,如等值查询,而不会泄漏明文数据。
6.透明数据加密
透明数据加密(Transparent Data Encryption),是数据库在将数据写入存储介质时对数据进行加密,从存储介质中读取数据时自动解密,防止攻击者绕过数据库认证机制直接读取数据文件中的数据,以解决静态数据泄露问题。该功能对于应用层几乎透明无感知,用户可根据需要决定是否启用透明数据加密功能。
Cybertec为PG提供了一个透明数据加密(TDE)的补丁。是目前唯一支持透明加密数据(集群)级的实现,独立于操作系统或文件系统加密。
7.账本数据库
账本数据库(Ledger Database)是一种特殊类型的数据库,它专门用于记录和管理事务、交易或数据的历史变更,以支持可追溯性、不可篡改性和安全性的需求。这种数据库通常与区块链技术、分布式账本技术以及与金融、供应链、物联网等领域相关的应用程序密切相关。
PostgreSQL的openGauss分支实现了一个名为账本数据库的功能。
账本数据库融合了区块链思想,将用户操作记录至两种历史表中,
即:用户历史表和全局区块表。
总结
如何保护敏感数据,防止数据泄漏、盗窃或篡改,学习完本篇将有助于确保组织的数据完整性和保密性,还希望前辈们留言区多多提出宝贵的意见!