kingbase教程FG136-金仓数据库安全管理与防护
本文档详细介绍了金仓数据库的安全管理与防护策略,包括安全架构设计、访问控制、数据加密、审计系统配置等内容。风哥教程参考金仓官方文档安全管理、数据库审计等内容,适合DBA人员和数据库管理人员实施数据库安全防护。
Part01-基础概念与理论知识
1.1 数据库安全概述
数据库安全是指保护数据库免受未授权访问、数据泄露、数据损坏等安全威胁的措施和策略。数据库安全涉及多个层面,包括物理安全、网络安全、访问控制、数据加密、审计等。
数据库安全的重要性:
金仓数据库安全合规认证:
1. 国家信息安全等级保护认证
2. CMMI5级认证
3. ISO27001信息安全管理体系认证
4. 军用信息安全产品认证
5. 银联卡支付信息安全认证
6. 等保2.0合规认证
7. GDPR合规性
8. 行业特定认证(金融、电信等)
# 身份认证配置
## 1. 密码认证
— 修改密码认证参数
ALTER SYSTEM SET password_encryption = ‘scram-sha-256’;
ALTER SYSTEM SET password_min_length = 12;
ALTER SYSTEM SET password_reuse_time = 90;
ALTER SYSTEM SET password_reuse_max = 5;
ALTER SYSTEM SET password_grace_time = 7;
## 2. LDAP认证
— 配置LDAP认证
ALTER SYSTEM SET ldap_server = ‘ldap://192.168.1.100:389’;
ALTER SYSTEM SET ldap_base_dn = ‘dc=fgedu,dc=net,dc=cn’;
ALTER SYSTEM SET ldap_bind_dn = ‘cn=admin,dc=fgedu,dc=net,dc=cn’;
ALTER SYSTEM SET ldap_bind_pw = ‘ldapadmin’;
## 3. Kerberos认证
— 配置Kerberos认证
ALTER SYSTEM SET krb_server_keyfile = ‘/kingbase/conf/krb5.keytab’;
ALTER SYSTEM SET krb_realm = ‘FGEDU.NET.CN’;
# 授权管理配置
## 1. 创建角色
— 创建管理员角色
CREATE ROLE admin_role WITH SUPERUSER CREATEDB CREATEROLE;
— 创建开发角色
CREATE ROLE dev_role WITH LOGIN;
— 创建只读角色
CREATE ROLE readonly_role WITH LOGIN;
## 2. 授予权限
— 授予开发角色权限
GRANT CONNECT ON DATABASE fgedudb TO dev_role;
GRANT USAGE ON SCHEMA public TO dev_role;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO dev_role;
— 授予只读角色权限
GRANT CONNECT ON DATABASE fgedudb TO readonly_role;
GRANT USAGE ON SCHEMA public TO readonly_role;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_role;
## 3. 创建用户
— 创建管理员用户
CREATE USER admin WITH PASSWORD ‘Admin123!’ IN ROLE admin_role;
— 创建开发用户
CREATE USER dev1 WITH PASSWORD ‘Dev123!’ IN ROLE dev_role;
— 创建只读用户
CREATE USER readonly WITH PASSWORD ‘Read123!’ IN ROLE readonly_role;
## 4. 权限回收
— 回收权限
REVOKE DELETE ON fgedu_user FROM dev_role;
# 传输加密配置
## 1. 生成SSL证书
$ cd /kingbase/conf
$ openssl req -new -x509 -days 365 -nodes -text -out server.crt -keyout server.key
$ chmod 600 server.key
## 2. 配置SSL
ALTER SYSTEM SET ssl = ‘on’;
ALTER SYSTEM SET ssl_cert_file = ‘server.crt’;
ALTER SYSTEM SET ssl_key_file = ‘server.key’;
ALTER SYSTEM SET ssl_ca_file = ‘root.crt’;
## 3. 验证SSL连接
$ ksql -U fgedu -d fgedudb -h 192.168.1.100 -p 54321 -c “\conninfo”
# 存储加密配置
## 1. 启用透明数据加密
ALTER SYSTEM SET tde_enabled = on;
## 2. 创建加密表空间
CREATE TABLESPACE encrypted_tbs OWNER fgedu LOCATION ‘/kingbase/tablespaces/encrypted’ ENCRYPTION ‘AES256’;
## 3. 创建加密表
CREATE TABLE fgedu_user (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100),
password VARCHAR(100),
address VARCHAR(200)
) TABLESPACE encrypted_tbs;
## 4. 列级加密
CREATE TABLE fgedu_credit_card (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES fgedu_user(id),
card_number VARCHAR(16) ENCRYPTED WITH (ENCRYPTION_TYPE = ‘AES256’, ENCRYPTION_KEY = ‘credit_card_key’),学习交流加群风哥QQ113257174
expiry_date VARCHAR(5) ENCRYPTED WITH (ENCRYPTION_TYPE = ‘AES256’, ENCRYPTION_KEY = ‘credit_card_key’),
cvv VARCHAR(3) ENCRYPTED WITH (ENCRYPTION_TYPE = ‘AES256’, ENCRYPTION_KEY = ‘credit_card_key’)
);
- 数据保护:防止敏感数据泄露和滥用
- 业务连续性:确保数据库系统的稳定运行
- 合规要求:满足行业和法规的安全要求
- 声誉保护:避免安全事件对企业声誉的损害
- 成本控制:减少安全事件带来的损失
1.2 金仓数据库安全特性
1.2.1 安全特性概述
- 身份认证:支持多种认证方式,包括密码认证、LDAP认证、Kerberos认证等
- 授权管理:基于角色的访问控制(RBAC),细粒度的权限管理
- 数据加密:支持透明数据加密(TDE)、列级加密、SSL传输加密
- 审计功能:详细的审计日志,记录用户操作和系统事件
- 安全加固:内置安全加固功能,减少安全漏洞,风哥提示:
- 网络安全:支持SSL/TLS加密传输,防火墙规则
- 数据脱敏:支持敏感数据脱敏,保护隐私信息
- 入侵检测:支持异常行为检测,识别潜在的安全威胁
1.2.2 安全标准合规
金仓数据库安全合规认证:
1. 国家信息安全等级保护认证
2. CMMI5级认证
3. ISO27001信息安全管理体系认证
4. 军用信息安全产品认证
5. 银联卡支付信息安全认证
6. 等保2.0合规认证
7. GDPR合规性
8. 行业特定认证(金融、电信等)
1.3 安全威胁与防护策略
1.3.1 常见安全威胁
- 未授权访问:未经授权的用户访问数据库
- 数据泄露:敏感数据被窃取或泄露
- SQL注入:恶意SQL语句注入攻击
- 权限滥用:合法用户滥用权限
- 数据损坏:数据被恶意修改或删除
- 拒绝服务攻击:系统资源被耗尽,导致服务不可用
- 内部威胁:内部人员的恶意行为
- 系统漏洞:数据库系统本身的安全漏洞
1.3.2 防护策略
- 访问控制:实施严格的身份认证和授权管理
- 数据加密:对敏感数据进行加密存储和传输
- 审计监控:记录和监控数据库操作
- 安全加固:定期更新补丁,配置安全参数,学习交流加群风哥微信: itpux-com
- 网络隔离:实施网络分段,限制数据库访问
- 备份恢复:定期备份数据,确保数据可恢复
- 安全培训:提高用户和管理员的安全意识
- 漏洞扫描:定期进行安全漏洞扫描
Part02-生产环境规划与建议
2.1 安全架构设计
2.1.1 网络架构
- 网络分段:将数据库网络与其他网络隔离
- 防火墙:配置防火墙规则,限制数据库访问
- VPN:使用VPN连接,确保远程访问安全
- 入侵检测:部署IDS/IPS系统,检测和阻止攻击
2.1.2 系统架构
- 最小权限原则:用户只获得必要的权限
- 角色分离:不同职责的用户使用不同角色
- 多因素认证:实施多因素认证,提高安全性
- 加密传输:使用SSL/TLS加密数据传输
2.1.3 存储架构
- 数据加密:对敏感数据进行加密存储
- 备份加密:对备份数据进行加密
- 存储隔离:将不同安全级别的数据存储在不同位置,学习交流加群风哥QQ113257174
- 访问控制:限制存储设备的访问权限
2.2 访问控制策略
2.2.1 身份认证
# 身份认证配置
## 1. 密码认证
— 修改密码认证参数
ALTER SYSTEM SET password_encryption = ‘scram-sha-256’;
ALTER SYSTEM SET password_min_length = 12;
ALTER SYSTEM SET password_reuse_time = 90;
ALTER SYSTEM SET password_reuse_max = 5;
ALTER SYSTEM SET password_grace_time = 7;
## 2. LDAP认证
— 配置LDAP认证
ALTER SYSTEM SET ldap_server = ‘ldap://192.168.1.100:389’;
ALTER SYSTEM SET ldap_base_dn = ‘dc=fgedu,dc=net,dc=cn’;
ALTER SYSTEM SET ldap_bind_dn = ‘cn=admin,dc=fgedu,dc=net,dc=cn’;
ALTER SYSTEM SET ldap_bind_pw = ‘ldapadmin’;
## 3. Kerberos认证
— 配置Kerberos认证
ALTER SYSTEM SET krb_server_keyfile = ‘/kingbase/conf/krb5.keytab’;
ALTER SYSTEM SET krb_realm = ‘FGEDU.NET.CN’;
2.2.2 授权管理
# 授权管理配置
## 1. 创建角色
— 创建管理员角色
CREATE ROLE admin_role WITH SUPERUSER CREATEDB CREATEROLE;
— 创建开发角色
CREATE ROLE dev_role WITH LOGIN;
— 创建只读角色
CREATE ROLE readonly_role WITH LOGIN;
## 2. 授予权限
— 授予开发角色权限
GRANT CONNECT ON DATABASE fgedudb TO dev_role;
GRANT USAGE ON SCHEMA public TO dev_role;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO dev_role;
— 授予只读角色权限
GRANT CONNECT ON DATABASE fgedudb TO readonly_role;
GRANT USAGE ON SCHEMA public TO readonly_role;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_role;
## 3. 创建用户
— 创建管理员用户
CREATE USER admin WITH PASSWORD ‘Admin123!’ IN ROLE admin_role;
— 创建开发用户
CREATE USER dev1 WITH PASSWORD ‘Dev123!’ IN ROLE dev_role;
— 创建只读用户
CREATE USER readonly WITH PASSWORD ‘Read123!’ IN ROLE readonly_role;
## 4. 权限回收
— 回收权限
REVOKE DELETE ON fgedu_user FROM dev_role;
2.3 数据加密策略
2.3.1 传输加密
# 传输加密配置
## 1. 生成SSL证书
$ cd /kingbase/conf
$ openssl req -new -x509 -days 365 -nodes -text -out server.crt -keyout server.key
$ chmod 600 server.key
## 2. 配置SSL
ALTER SYSTEM SET ssl = ‘on’;
ALTER SYSTEM SET ssl_cert_file = ‘server.crt’;
ALTER SYSTEM SET ssl_key_file = ‘server.key’;
ALTER SYSTEM SET ssl_ca_file = ‘root.crt’;
## 3. 验证SSL连接
$ ksql -U fgedu -d fgedudb -h 192.168.1.100 -p 54321 -c “\conninfo”
2.3.2 存储加密
# 存储加密配置
## 1. 启用透明数据加密
ALTER SYSTEM SET tde_enabled = on;
## 2. 创建加密表空间
CREATE TABLESPACE encrypted_tbs OWNER fgedu LOCATION ‘/kingbase/tablespaces/encrypted’ ENCRYPTION ‘AES256’;
## 3. 创建加密表
CREATE TABLE fgedu_user (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100),
password VARCHAR(100),
address VARCHAR(200)
) TABLESPACE encrypted_tbs;
## 4. 列级加密
CREATE TABLE fgedu_credit_card (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES fgedu_user(id),
card_number VARCHAR(16) ENCRYPTED WITH (ENCRYPTION_TYPE = ‘AES256’, ENCRYPTION_KEY = ‘credit_card_key’),学习交流加群风哥QQ113257174
expiry_date VARCHAR(5) ENCRYPTED WITH (ENCRYPTION_TYPE = ‘AES256’, ENCRYPTION_KEY = ‘credit_card_key’),
cvv VARCHAR(3) ENCRYPTED WITH (ENCRYPTION_TYPE = ‘AES256’, ENCRYPTION_KEY = ‘credit_card_key’)
);
Part03-生产环境项目实施方案
3.1 安全配置实施
3.1.1 系统安全配置
# 操作系统安全加固
# 关闭不必要的服务
$ systemctl stop postfix
$ systemctl disable postfix
# 配置防火墙
$ firewall-cmd –permanent –add-port=54321/tcp
$ firewall-cmd –reload
# 配置SELinux
$ setenforce 1
$ semanage port -a -t postgresql_port_t -p tcp 54321
# 限制文件权限
$ chmod 700 /kingbase/app
$ chmod 700 /kingbase/fgdata
# 关闭不必要的服务
$ systemctl stop postfix
$ systemctl disable postfix
# 配置防火墙
$ firewall-cmd –permanent –add-port=54321/tcp
$ firewall-cmd –reload
# 配置SELinux
$ setenforce 1
$ semanage port -a -t postgresql_port_t -p tcp 54321
# 限制文件权限
$ chmod 700 /kingbase/app
$ chmod 700 /kingbase/fgdata
3.1.2 数据库安全配置
# 数据库安全加固
— 修改默认端口
ALTER SYSTEM SET port = 54321;
— 限制监听地址
ALTER SYSTEM SET listen_addresses = ‘192.168.1.100’;
— 禁用不需要的认证方式
ALTER SYSTEM SET password_encryption = ‘scram-sha-256’;
— 配置连接数限制
ALTER SYSTEM SET max_connections = 100;
— 配置密码策略
ALTER SYSTEM SET password_min_length = 12;
ALTER SYSTEM SET password_reuse_time = 90;
ALTER SYSTEM SET password_reuse_max = 5;
— 应用配置
SELECT sys_reload_conf();
— 修改默认端口
ALTER SYSTEM SET port = 54321;
— 限制监听地址
ALTER SYSTEM SET listen_addresses = ‘192.168.1.100’;
— 禁用不需要的认证方式
ALTER SYSTEM SET password_encryption = ‘scram-sha-256’;
— 配置连接数限制
ALTER SYSTEM SET max_connections = 100;
— 配置密码策略
ALTER SYSTEM SET password_min_length = 12;
ALTER SYSTEM SET password_reuse_time = 90;
ALTER SYSTEM SET password_reuse_max = 5;
— 应用配置
SELECT sys_reload_conf();
3.2 审计系统配置
3.2.1 审计功能配置
# 审计功能配置
— 启用审计
ALTER SYSTEM SET audit_enabled = on;
— 设置审计级别
ALTER SYSTEM SET audit_level = ‘MEDIUM’;
— 设置审计存储方式
ALTER SYSTEM SET audit_store = ‘file’;
— 设置审计日志路径
ALTER SYSTEM SET audit_directory = ‘/kingbase/audit’;
— 设置审计日志保留时间
ALTER SYSTEM SET audit_log_rotation_age = ‘1d’;
ALTER SYSTEM SET audit_log_rotation_size = ‘100MB’;
— 应用配置
SELECT sys_reload_conf();
— 启用审计
ALTER SYSTEM SET audit_enabled = on;
— 设置审计级别
ALTER SYSTEM SET audit_level = ‘MEDIUM’;
— 设置审计存储方式
ALTER SYSTEM SET audit_store = ‘file’;
— 设置审计日志路径
ALTER SYSTEM SET audit_directory = ‘/kingbase/audit’;
— 设置审计日志保留时间
ALTER SYSTEM SET audit_log_rotation_age = ‘1d’;
ALTER SYSTEM SET audit_log_rotation_size = ‘100MB’;
— 应用配置
SELECT sys_reload_conf();
3.2.2 审计策略配置
# 审计策略配置
— 审计登录失败
ALTER SYSTEM SET audit_login_failed = on;
— 审计DML操作
ALTER SYSTEM SET audit_dml = on;
— 审计DDL操作
ALTER SYSTEM SET audit_ddl = on;
— 审计权限变更
ALTER SYSTEM SET audit_privilege = on;
— 审计系统函数
ALTER SYSTEM SET audit_system_function = on;
— 应用配置
SELECT sys_reload_conf();
# 安全监控配置
## 1. 配置Zabbix监控
# 安装Zabbix agent
$ yum install zabbix-agent
# 配置Zabbix agent
$ vi /etc/zabbix/zabbix_agentd.conf
Server=192.168.1.100
Hostname=kingbase-server
# 启动Zabbix agent
$ systemctl start zabbix-agent
$ systemctl enable zabbix-agent
## 2. 配置安全监控项
# 监控失败登录尝试
UserParameter=kingbase.login.failed,gsql -U fgedu -d fgedudb -c “SELECT count(*) FROM sys_audit_log WHERE action = ‘LOGIN’ AND status = ‘FAILED’ AND action_time > NOW() – INTERVAL ‘1h'”
# 监控权限变更
UserParameter=kingbase.privilege.change,gsql -U fgedu -d fgedudb -c “SELECT count(*) FROM sys_audit_log WHERE action LIKE ‘%PRIVILEGE%’ AND action_time > NOW() – INTERVAL ‘1h'”
# 监控DDL操作
UserParameter=kingbase.ddl.operation,gsql -U fgedu -d fgedudb -c “SELECT count(*) FROM sys_audit_log WHERE action LIKE ‘%DDL%’ AND action_time > NOW() – INTERVAL ‘1h'”
# 安全告警配置
## 1. 配置Zabbix告警
# 登录失败告警
– 触发器名称:Kingbase登录失败次数过多
– 表达式:{kingbase-server:kingbase.login.failed.last()} > 5
– 严重程度:警告
– 告警方式:邮件、短信
# 权限变更告警
– 触发器名称:Kingbase权限变更
– 表达式:{kingbase-server:kingbase.privilege.change.last()} > 0
– 严重程度:信息
– 告警方式:邮件
# DDL操作告警
– 触发器名称:Kingbase DDL操作
– 表达式:{kingbase-server:kingbase.ddl.operation.last()} > 0
– 严重程度:信息
– 告警方式:邮件
## 2. 配置日志告警
# 配置rsyslog
$ vi /etc/rsyslog.conf
local0.* /var/log/kingbase.log
# 配置logwatch
$ vi /etc/logwatch/conf/services/kingbase.conf
LogFile = /var/log/kingbase.log
*ApplyStdDate = “\w{3}\s+\d+\s+\d+:\d+:\d+”
# 配置cron任务
$ crontab -e
0 * * * * /usr/sbin/logwatch –service kingbase –mailto admin@fgedu.net.cn –detail high
— 审计登录失败
ALTER SYSTEM SET audit_login_failed = on;
— 审计DML操作
ALTER SYSTEM SET audit_dml = on;
— 审计DDL操作
ALTER SYSTEM SET audit_ddl = on;
— 审计权限变更
ALTER SYSTEM SET audit_privilege = on;
— 审计系统函数
ALTER SYSTEM SET audit_system_function = on;
— 应用配置
SELECT sys_reload_conf();
3.3 安全监控与告警
3.3.1 安全监控配置
# 安全监控配置
## 1. 配置Zabbix监控
# 安装Zabbix agent
$ yum install zabbix-agent
# 配置Zabbix agent
$ vi /etc/zabbix/zabbix_agentd.conf
Server=192.168.1.100
Hostname=kingbase-server
# 启动Zabbix agent
$ systemctl start zabbix-agent
$ systemctl enable zabbix-agent
## 2. 配置安全监控项
# 监控失败登录尝试
UserParameter=kingbase.login.failed,gsql -U fgedu -d fgedudb -c “SELECT count(*) FROM sys_audit_log WHERE action = ‘LOGIN’ AND status = ‘FAILED’ AND action_time > NOW() – INTERVAL ‘1h'”
# 监控权限变更
UserParameter=kingbase.privilege.change,gsql -U fgedu -d fgedudb -c “SELECT count(*) FROM sys_audit_log WHERE action LIKE ‘%PRIVILEGE%’ AND action_time > NOW() – INTERVAL ‘1h'”
# 监控DDL操作
UserParameter=kingbase.ddl.operation,gsql -U fgedu -d fgedudb -c “SELECT count(*) FROM sys_audit_log WHERE action LIKE ‘%DDL%’ AND action_time > NOW() – INTERVAL ‘1h'”
3.3.2 安全告警配置
# 安全告警配置
## 1. 配置Zabbix告警
# 登录失败告警
– 触发器名称:Kingbase登录失败次数过多
– 表达式:{kingbase-server:kingbase.login.failed.last()} > 5
– 严重程度:警告
– 告警方式:邮件、短信
# 权限变更告警
– 触发器名称:Kingbase权限变更
– 表达式:{kingbase-server:kingbase.privilege.change.last()} > 0
– 严重程度:信息
– 告警方式:邮件
# DDL操作告警
– 触发器名称:Kingbase DDL操作
– 表达式:{kingbase-server:kingbase.ddl.operation.last()} > 0
– 严重程度:信息
– 告警方式:邮件
## 2. 配置日志告警
# 配置rsyslog
$ vi /etc/rsyslog.conf
local0.* /var/log/kingbase.log
# 配置logwatch
$ vi /etc/logwatch/conf/services/kingbase.conf
LogFile = /var/log/kingbase.log
*ApplyStdDate = “\w{3}\s+\d+\s+\d+:\d+:\d+”
# 配置cron任务
$ crontab -e
0 * * * * /usr/sbin/logwatch –service kingbase –mailto admin@fgedu.net.cn –detail high
Part04-生产案例与实战讲解
4.1 安全加固案例
4.1.1 案例背景
某金融机构的数据库系统需要进行安全加固,以满足等保三级要求。
4.1.2 解决方案
# 安全加固实施步骤
## 1. 系统层面加固
# 关闭不必要的服务
$ systemctl stop postfix cups avahi-daemon
$ systemctl disable postfix cups avahi-daemon
# 配置防火墙
$ firewall-cmd –permanent –add-port=54321/tcp
$ firewall-cmd –permanent –add-port=22/tcp
$ firewall-cmd –reload
# 配置SELinux
$ setenforce 1
$ semanage port -a -t postgresql_port_t -p tcp 54321
# 限制文件权限
$ chmod 700 /kingbase/app
$ chmod 700 /kingbase/fgdata
$ chown -R kingbase:kingbase /kingbase
## 2. 数据库层面加固
— 修改默认端口
ALTER SYSTEM SET port = 54321;
— 限制监听地址
ALTER SYSTEM SET listen_addresses = ‘192.168.1.100’;
— 配置密码策略
ALTER SYSTEM SET password_encryption = ‘scram-sha-256’;
ALTER SYSTEM SET password_min_length = 12;
ALTER SYSTEM SET password_reuse_time = 90;
ALTER SYSTEM SET password_reuse_max = 5;
— 配置连接数限制
ALTER SYSTEM SET max_connections = 100;
— 启用审计
ALTER SYSTEM SET audit_enabled = on;
ALTER SYSTEM SET audit_level = ‘MEDIUM’;
— 启用SSL
ALTER SYSTEM SET ssl = ‘on’;
— 应用配置
SELECT sys_reload_conf();
## 3. 访问控制加固
— 创建角色
CREATE ROLE admin_role WITH SUPERUSER CREATEDB CREATEROLE;
CREATE ROLE dev_role WITH LOGIN;
CREATE ROLE readonly_role WITH LOGIN;
— 授予权限
GRANT CONNECT ON DATABASE fgedudb TO dev_role;
GRANT USAGE ON SCHEMA public TO dev_role;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO dev_role;
GRANT CONNECT ON DATABASE fgedudb TO readonly_role;
GRANT USAGE ON SCHEMA public TO readonly_role;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_role;
— 创建用户
CREATE USER admin WITH PASSWORD ‘Admin123!’ IN ROLE admin_role;
CREATE USER dev1 WITH PASSWORD ‘Dev123!’ IN ROLE dev_role;
CREATE USER readonly WITH PASSWORD ‘Read123!’ IN ROLE readonly_role;
— 锁定默认用户
ALTER USER system WITH PASSWORD ‘System123!’;
REVOKE ALL PRIVILEGES ON DATABASE fgedudb FROM public;
## 1. 系统层面加固
# 关闭不必要的服务
$ systemctl stop postfix cups avahi-daemon
$ systemctl disable postfix cups avahi-daemon
# 配置防火墙
$ firewall-cmd –permanent –add-port=54321/tcp
$ firewall-cmd –permanent –add-port=22/tcp
$ firewall-cmd –reload
# 配置SELinux
$ setenforce 1
$ semanage port -a -t postgresql_port_t -p tcp 54321
# 限制文件权限
$ chmod 700 /kingbase/app
$ chmod 700 /kingbase/fgdata
$ chown -R kingbase:kingbase /kingbase
## 2. 数据库层面加固
— 修改默认端口
ALTER SYSTEM SET port = 54321;
— 限制监听地址
ALTER SYSTEM SET listen_addresses = ‘192.168.1.100’;
— 配置密码策略
ALTER SYSTEM SET password_encryption = ‘scram-sha-256’;
ALTER SYSTEM SET password_min_length = 12;
ALTER SYSTEM SET password_reuse_time = 90;
ALTER SYSTEM SET password_reuse_max = 5;
— 配置连接数限制
ALTER SYSTEM SET max_connections = 100;
— 启用审计
ALTER SYSTEM SET audit_enabled = on;
ALTER SYSTEM SET audit_level = ‘MEDIUM’;
— 启用SSL
ALTER SYSTEM SET ssl = ‘on’;
— 应用配置
SELECT sys_reload_conf();
## 3. 访问控制加固
— 创建角色
CREATE ROLE admin_role WITH SUPERUSER CREATEDB CREATEROLE;
CREATE ROLE dev_role WITH LOGIN;
CREATE ROLE readonly_role WITH LOGIN;
— 授予权限
GRANT CONNECT ON DATABASE fgedudb TO dev_role;
GRANT USAGE ON SCHEMA public TO dev_role;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO dev_role;
GRANT CONNECT ON DATABASE fgedudb TO readonly_role;
GRANT USAGE ON SCHEMA public TO readonly_role;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_role;
— 创建用户
CREATE USER admin WITH PASSWORD ‘Admin123!’ IN ROLE admin_role;
CREATE USER dev1 WITH PASSWORD ‘Dev123!’ IN ROLE dev_role;
CREATE USER readonly WITH PASSWORD ‘Read123!’ IN ROLE readonly_role;
— 锁定默认用户
ALTER USER system WITH PASSWORD ‘System123!’;
REVOKE ALL PRIVILEGES ON DATABASE fgedudb FROM public;
4.1.3 实施效果
- 安全级别提升:满足等保三级要求
- 访问控制严格:实现了细粒度的权限管理
- 数据传输安全:启用了SSL加密传输
- 操作可审计:启用了详细的审计功能
- 系统加固:关闭了不必要的服务,配置了防火墙
4.2 审计配置案例
4.2.1 案例背景
某政府部门需要配置数据库审计系统,以满足合规要求。
4.2.2 解决方案
# 审计系统配置步骤
## 1. 配置审计功能
— 启用审计
ALTER SYSTEM SET audit_enabled = on;
— 设置审计级别
ALTER SYSTEM SET audit_level = ‘HIGH’;
— 设置审计存储方式
ALTER SYSTEM SET audit_store = ‘file’;
— 设置审计日志路径
ALTER SYSTEM SET audit_directory = ‘/kingbase/audit’;
— 设置审计日志保留时间
ALTER SYSTEM SET audit_log_rotation_age = ‘7d’;
ALTER SYSTEM SET audit_log_rotation_size = ‘500MB’;
— 应用配置
SELECT sys_reload_conf();
## 2. 配置审计策略
— 审计登录失败
ALTER SYSTEM SET audit_login_failed = on;
— 审计DML操作
ALTER SYSTEM SET audit_dml = on;
— 审计DDL操作
ALTER SYSTEM SET audit_ddl = on;
— 审计权限变更
ALTER SYSTEM SET audit_privilege = on;
— 审计系统函数
ALTER SYSTEM SET audit_system_function = on;
— 应用配置
SELECT sys_reload_conf();
## 3. 审计日志管理
# 创建审计日志目录
$ mkdir -p /kingbase/audit
$ chown kingbase:kingbase /kingbase/audit
$ chmod 700 /kingbase/audit
# 配置日志轮转
$ vi /etc/logrotate.d/kingbase-audit
/kingbase/audit/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 600 kingbase kingbase
}
# 测试日志轮转
$ logrotate -f /etc/logrotate.d/kingbase-audit
## 4. 审计日志分析
— 查看登录失败记录
SELECT * FROM sys_audit_log WHERE action = ‘LOGIN’ AND status = ‘FAILED’ ORDER BY action_time DESC;
— 查看权限变更记录
SELECT * FROM sys_audit_log WHERE action LIKE ‘%PRIVILEGE%’ ORDER BY action_time DESC;
— 查看DDL操作记录
SELECT * FROM sys_audit_log WHERE action LIKE ‘%DDL%’ ORDER BY action_time DESC;
## 1. 配置审计功能
— 启用审计
ALTER SYSTEM SET audit_enabled = on;
— 设置审计级别
ALTER SYSTEM SET audit_level = ‘HIGH’;
— 设置审计存储方式
ALTER SYSTEM SET audit_store = ‘file’;
— 设置审计日志路径
ALTER SYSTEM SET audit_directory = ‘/kingbase/audit’;
— 设置审计日志保留时间
ALTER SYSTEM SET audit_log_rotation_age = ‘7d’;
ALTER SYSTEM SET audit_log_rotation_size = ‘500MB’;
— 应用配置
SELECT sys_reload_conf();
## 2. 配置审计策略
— 审计登录失败
ALTER SYSTEM SET audit_login_failed = on;
— 审计DML操作
ALTER SYSTEM SET audit_dml = on;
— 审计DDL操作
ALTER SYSTEM SET audit_ddl = on;
— 审计权限变更
ALTER SYSTEM SET audit_privilege = on;
— 审计系统函数
ALTER SYSTEM SET audit_system_function = on;
— 应用配置
SELECT sys_reload_conf();
## 3. 审计日志管理
# 创建审计日志目录
$ mkdir -p /kingbase/audit
$ chown kingbase:kingbase /kingbase/audit
$ chmod 700 /kingbase/audit
# 配置日志轮转
$ vi /etc/logrotate.d/kingbase-audit
/kingbase/audit/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 600 kingbase kingbase
}
# 测试日志轮转
$ logrotate -f /etc/logrotate.d/kingbase-audit
## 4. 审计日志分析
— 查看登录失败记录
SELECT * FROM sys_audit_log WHERE action = ‘LOGIN’ AND status = ‘FAILED’ ORDER BY action_time DESC;
— 查看权限变更记录
SELECT * FROM sys_audit_log WHERE action LIKE ‘%PRIVILEGE%’ ORDER BY action_time DESC;
— 查看DDL操作记录
SELECT * FROM sys_audit_log WHERE action LIKE ‘%DDL%’ ORDER BY action_time DESC;
4.2.3 实施效果
- 合规要求满足:满足政府部门的合规要求
- 操作可追踪:所有数据库操作都有详细的审计记录
- 安全事件可发现:能够及时发现异常操作
- 日志管理规范:审计日志得到有效管理和存储
- 分析能力提升:能够对审计日志进行有效分析
4.3 数据加密案例
4.3.1 案例背景
某医疗机构需要对患者敏感数据进行加密保护,以满足隐私保护要求。
4.3.2 解决方案
# 数据加密实施步骤
## 1. 传输加密配置
# 生成SSL证书
$ cd /kingbase/conf
$ openssl req -new -x509 -days 365 -nodes -text -out server.crt -keyout server.key
$ chmod 600 server.key
# 配置SSL
ALTER SYSTEM SET ssl = ‘on’;
ALTER SYSTEM SET ssl_cert_file = ‘server.crt’;
ALTER SYSTEM SET ssl_key_file = ‘server.key’;
ALTER SYSTEM SET ssl_ca_file = ‘root.crt’;
# 应用配置
SELECT sys_reload_conf();
# 验证SSL连接
$ ksql -U fgedu -d fgedudb -h 192.168.1.100 -p 54321 -c “\conninfo”
## 2. 存储加密配置
# 启用透明数据加密
ALTER SYSTEM SET tde_enabled = on;
# 应用配置
SELECT sys_reload_conf();
# 创建加密表空间
CREATE TABLESPACE encrypted_tbs OWNER fgedu LOCATION ‘/kingbase/tablespaces/encrypted’ ENCRYPTION ‘AES256’;
# 创建患者表
CREATE TABLE fgedu_patient (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
id_card VARCHAR(18),
phone VARCHAR(11),
address VARCHAR(200),
medical_record TEXT
) TABLESPACE encrypted_tbs;
# 插入测试数据
INSERT INTO fgedu_patient (name, id_card, phone, address, medical_record) VALUES
(‘张三’, ‘110101199001011234’, ‘13800138000’, ‘北京市海淀区’, ‘高血压,糖尿病’),
(‘李四’, ‘110101199001011235’, ‘13800138001’, ‘北京市朝阳区’, ‘冠心病,高血脂’);
# 查看数据
SELECT * FROM fgedu_patient;
## 3. 列级加密配置
# 创建加密密钥
CREATE ENCRYPTION KEY patient_key WITH ALGORITHM ‘AES256’ IDENTIFIED BY ‘patient_key_password’;
# 创建敏感信息表
CREATE TABLE fgedu_patient_sensitive (
id SERIAL PRIMARY KEY,
patient_id INTEGER REFERENCES fgedu_patient(id),
bank_card VARCHAR(16) ENCRYPTED WITH (ENCRYPTION_TYPE = ‘AES256’, ENCRYPTION_KEY = ‘patient_key’),
social_security VARCHAR(18) ENCRYPTED WITH (ENCRYPTION_TYPE = ‘AES256’, ENCRYPTION_KEY = ‘patient_key’),
family_member VARCHAR(100) ENCRYPTED WITH (ENCRYPTION_TYPE = ‘AES256’, ENCRYPTION_KEY = ‘patient_key’)
) TABLESPACE encrypted_tbs;
# 插入测试数据
INSERT INTO fgedu_patient_sensitive (patient_id, bank_card, social_security, family_member) VALUES
(1, ‘6222021234567890123’, ‘110101199001011234’, ‘父亲:张建国,母亲:李素华’),
(2, ‘6222021234567890124’, ‘110101199001011235’, ‘父亲:李建国,母亲:王素华’);
# 查看加密数据
SELECT * FROM fgedu_patient_sensitive;
## 1. 传输加密配置
# 生成SSL证书
$ cd /kingbase/conf
$ openssl req -new -x509 -days 365 -nodes -text -out server.crt -keyout server.key
$ chmod 600 server.key
# 配置SSL
ALTER SYSTEM SET ssl = ‘on’;
ALTER SYSTEM SET ssl_cert_file = ‘server.crt’;
ALTER SYSTEM SET ssl_key_file = ‘server.key’;
ALTER SYSTEM SET ssl_ca_file = ‘root.crt’;
# 应用配置
SELECT sys_reload_conf();
# 验证SSL连接
$ ksql -U fgedu -d fgedudb -h 192.168.1.100 -p 54321 -c “\conninfo”
## 2. 存储加密配置
# 启用透明数据加密
ALTER SYSTEM SET tde_enabled = on;
# 应用配置
SELECT sys_reload_conf();
# 创建加密表空间
CREATE TABLESPACE encrypted_tbs OWNER fgedu LOCATION ‘/kingbase/tablespaces/encrypted’ ENCRYPTION ‘AES256’;
# 创建患者表
CREATE TABLE fgedu_patient (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
id_card VARCHAR(18),
phone VARCHAR(11),
address VARCHAR(200),
medical_record TEXT
) TABLESPACE encrypted_tbs;
# 插入测试数据
INSERT INTO fgedu_patient (name, id_card, phone, address, medical_record) VALUES
(‘张三’, ‘110101199001011234’, ‘13800138000’, ‘北京市海淀区’, ‘高血压,糖尿病’),
(‘李四’, ‘110101199001011235’, ‘13800138001’, ‘北京市朝阳区’, ‘冠心病,高血脂’);
# 查看数据
SELECT * FROM fgedu_patient;
## 3. 列级加密配置
# 创建加密密钥
CREATE ENCRYPTION KEY patient_key WITH ALGORITHM ‘AES256’ IDENTIFIED BY ‘patient_key_password’;
# 创建敏感信息表
CREATE TABLE fgedu_patient_sensitive (
id SERIAL PRIMARY KEY,
patient_id INTEGER REFERENCES fgedu_patient(id),
bank_card VARCHAR(16) ENCRYPTED WITH (ENCRYPTION_TYPE = ‘AES256’, ENCRYPTION_KEY = ‘patient_key’),
social_security VARCHAR(18) ENCRYPTED WITH (ENCRYPTION_TYPE = ‘AES256’, ENCRYPTION_KEY = ‘patient_key’),
family_member VARCHAR(100) ENCRYPTED WITH (ENCRYPTION_TYPE = ‘AES256’, ENCRYPTION_KEY = ‘patient_key’)
) TABLESPACE encrypted_tbs;
# 插入测试数据
INSERT INTO fgedu_patient_sensitive (patient_id, bank_card, social_security, family_member) VALUES
(1, ‘6222021234567890123’, ‘110101199001011234’, ‘父亲:张建国,母亲:李素华’),
(2, ‘6222021234567890124’, ‘110101199001011235’, ‘父亲:李建国,母亲:王素华’);
# 查看加密数据
SELECT * FROM fgedu_patient_sensitive;
4.3.3 实施效果
- 数据传输安全:启用了SSL加密传输,保护数据传输过程
- 数据存储安全:对敏感数据进行了加密存储,防止数据泄露,更多视频教程www.fgedu.net.cn
- 隐私保护:满足医疗数据隐私保护要求
- 合规要求:满足相关法规的安全要求
- 性能影响小:加密对系统性能影响较小
Part05-风哥经验总结与分享
5.1 安全管理最佳实践
5.1.1 安全架构最佳实践
- 网络隔离:将数据库网络与其他网络隔离,减少攻击面
- 多层防护:实施多层安全防护,包括防火墙、入侵检测、访问控制等
- 最小权限:遵循最小权限原则,用户只获得必要的权限
- 定期审计:定期进行安全审计,发现和修复安全问题
- 备份恢复:定期备份数据,确保数据可恢复
5.1.2 访问控制最佳实践
- 角色分离:不同职责的用户使用不同角色,避免权限混淆
- 强密码策略:实施强密码策略,定期更换密码
- 多因素认证:对敏感操作实施多因素认证
- 定期权限审查:定期审查用户权限,撤销不必要的权限
- 会话管理:配置合理的会话超时时间,防止会话劫持
5.1.3 数据加密最佳实践
- 传输加密:启用SSL/TLS加密传输,保护数据传输过程
- 存储加密:对敏感数据进行加密存储,防止数据泄露,更多学习教程公众号风哥教程itpux_com
- 密钥管理:建立完善的密钥管理机制,定期更换密钥
- 加密算法:使用安全的加密算法,如AES-256
- 性能平衡:在安全性和性能之间取得平衡,避免过度加密影响性能
5.1.4 审计监控最佳实践
- 全面审计:启用详细的审计功能,记录所有重要操作
- 实时监控:实施实时安全监控,及时发现异常行为
- 告警机制:配置合理的告警机制,及时响应安全事件
- 日志管理:建立完善的日志管理机制,确保日志安全存储和分析
- 定期分析:定期分析审计日志,发现潜在的安全威胁
5.2 常见安全问题与解决方案
5.2.1 密码安全问题
问题:弱密码、密码泄露、密码过期
解决方案:
解决方案:
- 实施强密码策略,要求密码长度至少12位,包含大小写字母、数字和特殊字符
- 定期更换密码,设置密码过期时间
- 使用密码管理工具,避免密码重复使用
- 对密码进行加密存储,使用scram-sha-256等安全的加密算法
- 实施多因素认证,提高密码安全性
5.2.2 权限管理问题
问题:权限过度、权限滥用、权限过期
解决方案:
解决方案:
- 遵循最小权限原则,用户只获得必要的权限
- 使用角色管理权限,避免直接授予用户权限,from DB视频:www.itpux.com
- 定期审查用户权限,撤销不必要的权限
- 对敏感操作实施权限审批流程
- 使用审计功能监控权限变更
5.2.3 数据泄露问题
问题:数据窃取、数据滥用、数据丢失
解决方案:
解决方案:
- 对敏感数据进行加密存储和传输
- 实施访问控制,限制数据访问权限
- 使用数据脱敏技术,保护敏感信息
- 定期备份数据,确保数据可恢复
- 实施数据泄露防护(DLP)系统
5.2.4 系统漏洞问题
问题:系统漏洞、补丁过期、配置错误
解决方案:
# 安全技能培训内容
1. 数据库安全基础
– 数据库安全概念和重要性
– 常见安全威胁和防护策略
– 安全合规要求
2. 访问控制管理
– 身份认证配置
– 授权管理
– 角色管理
– 权限审查
3. 数据加密技术
– 传输加密
– 存储加密
– 密钥管理
– 加密算法
4. 审计系统配置
– 审计功能配置
– 审计策略制定
– 审计日志分析
– 审计日志管理
5. 安全监控与响应
– 安全监控工具配置
– 安全告警设置
– 安全事件响应
– 安全漏洞修复
6. 安全最佳实践
– 安全架构设计
– 安全配置实施
– 安全测试方法
– 安全运维流程
解决方案:
- 定期更新系统和数据库补丁
- 使用安全扫描工具,定期检测系统漏洞
- 配置安全参数,避免默认配置带来的安全风险
- 实施网络隔离,减少攻击面
- 建立安全漏洞响应机制
5.3 安全意识与培训
5.3.1 安全意识培训
- 定期培训:定期组织安全意识培训,提高用户和管理员的安全意识
- 案例分析:通过安全案例分析,提高对安全威胁的认识
- 安全测试:定期进行安全测试,如钓鱼邮件测试、密码强度测试等
- 安全政策:制定和宣传安全政策,明确安全责任和要求
- 奖惩机制:建立安全奖惩机制,鼓励安全行为,惩罚安全违规
5.3.2 安全技能培训
# 安全技能培训内容
1. 数据库安全基础
– 数据库安全概念和重要性
– 常见安全威胁和防护策略
– 安全合规要求
2. 访问控制管理
– 身份认证配置
– 授权管理
– 角色管理
– 权限审查
3. 数据加密技术
– 传输加密
– 存储加密
– 密钥管理
– 加密算法
4. 审计系统配置
– 审计功能配置
– 审计策略制定
– 审计日志分析
– 审计日志管理
5. 安全监控与响应
– 安全监控工具配置
– 安全告警设置
– 安全事件响应
– 安全漏洞修复
6. 安全最佳实践
– 安全架构设计
– 安全配置实施
– 安全测试方法
– 安全运维流程
5.3.3 安全文化建设
- 高层支持:获得高层管理层的支持,将安全作为企业战略的一部分
- 全员参与:安全不仅是IT部门的责任,而是全体员工的责任
- 持续改进:不断改进安全措施,适应新的安全威胁
- 知识共享:建立安全知识共享机制,促进安全经验交流
- 安全认证:鼓励员工获得安全认证,提高安全技能
风哥提示:数据库安全是一个持续的过程,需要不断地关注新的安全威胁和防护技术。作为DBA人员和数据库管理人员,我们应该建立完善的安全管理体系,实施多层次的安全防护措施,定期进行安全审计和培训,确保数据库系统的安全运行。
通过本文档的学习,您应该了解了金仓数据库的安全管理与防护策略,包括安全架构设计、访问控制、数据加密、审计系统配置等内容。在实际工作中,您可以根据这些内容,制定和实施适合您企业的数据库安全策略,确保数据库系统的安全运行。
本文档风哥教程参考金仓官方文档安全管理、数据库审计等内容,结合实际生产经验编写,希望对您的工作有所帮助。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
