1. 首页 > 国产数据库教程 > 达梦DM教程 > 正文

DM教程FG137-达梦数据库安全管理与审计

本文档风哥主要介绍DM数据库安全管理与审计,包括安全管理概述、审计概述、安全策略、用户管理、权限管理、审计管理、安全配置、审计配置、安全监控、实际案例和最佳实践等内容,风哥教程参考DM官方文档DM8系统管理员手册、DM8安全管理指南,适合数据库技术人员在学习和生产环境中使用。

Part01-基础概念与理论知识

1.1 安全管理概述

数据库安全管理是保护数据库免受未经授权的访问、使用、披露、破坏、修改或销毁的过程。

# 安全管理的定义
数据库安全管理是保护数据库免受未经授权的访问、使用、披露、破坏、修改或销毁的过程。
# 安全管理的重要性
– 保护数据安全:保护数据库中的敏感数据,防止数据泄露
– 满足合规要求:满足法律法规和行业标准的要求
– 防止数据损坏:防止数据库被恶意破坏或篡改
– 保障业务连续:保障数据库的稳定运行,防止业务中断
– 提高用户信任:提高用户对系统的信任度
# 安全管理的目标
– 机密性:确保数据只能被授权用户访问
– 完整性:确保数据不被未经授权的修改
– 可用性:确保授权用户能够访问数据
– 可追溯性:确保所有操作都可以被追踪和审计
– 不可否认性:确保操作者不能否认其操作
# 安全管理的层次
1. 网络层安全
– 防火墙配置
– 网络隔离
– 加密传输
– 访问控制
2. 操作系统层安全
– 操作系统加固
– 文件权限控制
– 用户权限管理
– 系统监控
3. 数据库层安全
– 用户管理
– 权限管理
– 审计管理
– 数据加密
4. 应用层安全
– 应用认证
– 应用授权
– 应用审计
– 数据脱敏

1.2 审计概述

数据库审计是记录和分析数据库操作的过程,用于监控数据库的使用情况,发现异常行为,保障数据库安全。

# 审计的定义
数据库审计是记录和分析数据库操作的过程,用于监控数据库的使用情况,发现异常行为,保障数据库安全。
# 审计的重要性
– 满足合规要求:满足法律法规和行业标准的审计要求
– 发现异常行为:及时发现异常操作,防止安全事件
– 追溯责任:追溯操作者的责任,便于事后分析
– 优化性能:分析数据库操作,优化数据库性能
– 保障安全:保障数据库的安全,防止数据泄露
# 审计的类型
1. 语句级审计
– 审计SQL语句的执行
– 记录SQL语句的详细信息 风哥提示:
– 适用于需要详细审计的场景
2. 权限级审计
– 审计权限的使用情况
– 记录权限的授予和撤销
– 适用于权限管理的场景
3. 对象级审计
– 审计特定对象的操作
– 记录对象的访问情况
– 适用于敏感对象的审计
4. 会话级审计
– 审计会话的连接和断开
– 记录会话的详细信息
– 适用于会话管理的场景
# 审计的内容
– 用户登录和登出
– SQL语句执行
– 权限授予和撤销
– 对象访问和修改
– 数据库配置修改
– 系统事件

1.3 安全策略

安全策略是数据库安全管理的重要依据,定义了数据库的安全规则和标准。

# 安全策略的定义
安全策略是数据库安全管理的重要依据,定义了数据库的安全规则和标准。
# 安全策略的内容
1. 访问控制策略
– 最小权限原则:用户只拥有完成工作所需的最小权限
– 职责分离原则:将关键操作分配给不同的用户 学习交流加群风哥微信: itpux-com
– 定期审查原则:定期审查用户权限,及时撤销不必要的权限
– 强制访问控制:根据安全级别控制访问
2. 密码策略
– 密码复杂度:密码必须包含大小写字母、数字和特殊字符
– 密码长度:密码长度至少为8位
– 密码过期:密码定期过期,强制用户修改密码
– 密码历史:禁止使用历史密码
3. 审计策略
– 审计范围:定义需要审计的操作和对象
– 审计级别:定义审计的详细程度
– 审计保留:定义审计日志的保留时间
– 审计分析:定期分析审计日志,发现异常行为
4. 数据加密策略
– 传输加密:使用SSL/TLS加密数据传输
– 存储加密:使用TDE加密敏感数据
– 备份加密:加密数据库备份文件
– 密钥管理:安全管理加密密钥
# 安全策略的实施
1. 制定安全策略
– 分析业务需求
– 评估安全风险
– 制定安全规则
– 制定安全标准
2. 实施安全策略
– 配置安全参数
– 配置审计规则
– 配置加密设置
– 配置访问控制
3. 监控安全策略
– 监控安全事件
– 监控审计日志
– 监控用户行为
– 监控系统状态
4. 优化安全策略
– 定期审查安全策略
– 根据实际情况调整安全策略
– 持续优化安全策略
– 提高安全策略的有效性
学习交流加群风哥QQ113257174
风哥提示:数据库安全管理是一个系统性的工作,需要从多个层面考虑,包括网络层、操作系统层、数据库层和应用层。制定完善的安全策略,是保障数据库安全的关键。

Part02-生产环境规划与建议

2.1 用户管理

2.1.1 用户创建

# 1. 创建用户
– 创建普通用户
SQL> CREATE USER fgedu_user IDENTIFIED BY ‘fgedu123456’;
– 创建用户并指定表空间
SQL> CREATE USER fgedu_user IDENTIFIED BY ‘fgedu123456’ DEFAULT TABLESPACE fgedu;
– 创建用户并指定临时表空间
SQL> CREATE USER fgedu_user IDENTIFIED BY ‘fgedu123456’ DEFAULT TABLESPACE fgedu TEMPORARY TABLESPACE fgedu_temp;
– 创建用户并指定密码策略
SQL> CREATE USER fgedu_user IDENTIFIED BY ‘Fgedu123456’ PASSWORD_POLICY;
# 2. 查看用户
– 查看所有用户
SQL> SELECT username, account_status, created FROM dba_users;
– 查看用户详细信息
SQL> SELECT * FROM dba_users WHERE username = ‘FGEDU_USER’;
– 查看用户权限
SQL> SELECT * FROM dba_sys_privs WHERE grantee = ‘FGEDU_USER’;
SQL> SELECT * FROM dba_tab_privs WHERE grantee = ‘FGEDU_USER’;
# 3. 修改用户
– 修改用户密码
SQL> ALTER USER fgedu_user IDENTIFIED BY ‘Fgedu654321’;
– 修改用户表空间
SQL> ALTER USER fgedu_user DEFAULT TABLESPACE fgedu_new;
– 修改用户状态
SQL> ALTER USER fgedu_user ACCOUNT LOCK;
SQL> ALTER USER fgedu_user ACCOUNT UNLOCK;
# 4. 删除用户
– 删除用户
SQL> DROP USER fgedu_user;
– 删除用户及其对象
SQL> DROP USER fgedu_user CASCADE;
# 5. 实际示例
– 创建用户
SQL> CREATE USER fgedu_user IDENTIFIED BY ‘Fgedu123456’ DEFAULT TABLESPACE fgedu TEMPORARY TABLESPACE fgedu_temp;
– 查看用户 更多视频教程www.fgedu.net.cn
SQL> SELECT username, account_status, created FROM dba_users WHERE username = ‘FGEDU_USER’;
# 输出结果
# USERNAME ACCOUNT_STATUS CREATED
# ————- ————— ——————-
# FGEDU_USER OPEN 2024-01-01 10:00:00
– 修改用户密码
SQL> ALTER USER fgedu_user IDENTIFIED BY ‘Fgedu654321’;
– 查看用户权限
SQL> SELECT * FROM dba_sys_privs WHERE grantee = ‘FGEDU_USER’;
# 输出结果
# GRANTEE PRIVILEGE ADMIN_OPTION
# ———— —————————– ————–
# FGEDU_USER CREATE SESSION NO

2.1.2 用户配置

# 1. 配置用户密码策略
– 启用密码策略
SQL> ALTER SYSTEM SET ‘PWD_POLICY’ = 1 BOTH;
– 设置密码最小长度
SQL> ALTER SYSTEM SET ‘PWD_MIN_LEN’ = 8 BOTH;
– 设置密码复杂度
SQL> ALTER SYSTEM SET ‘PWD_COMPLEXITY’ = 1 BOTH;
– 设置密码过期时间(单位:天)
SQL> ALTER SYSTEM SET ‘PWD_EXPIRE_TIME’ = 90 BOTH;
# 2. 配置用户锁定策略
– 设置密码错误次数
SQL> ALTER SYSTEM SET ‘FAILED_LOGIN_ATTEMPTS’ = 5 BOTH;
– 设置密码锁定时间(单位:分钟)
SQL> ALTER SYSTEM SET ‘PASSWORD_LOCK_TIME’ = 30 BOTH;
# 3. 配置用户资源限制
– 配置用户连接数限制
SQL> ALTER USER fgedu_user PROFILE fgedu_profile;
SQL> CREATE PROFILE fgedu_profile LIMIT SESSIONS_PER_USER 10;
– 配置用户CPU时间限制
SQL> ALTER PROFILE fgedu_profile LIMIT CPU_PER_SESSION 3600;
– 配置用户内存使用限制
SQL> ALTER PROFILE fgedu_profile LIMIT PRIVATE_SGA 10485760;
# 4. 实际示例
– 配置密码策略 更多学习教程公众号风哥教程itpux_com
SQL> ALTER SYSTEM SET ‘PWD_POLICY’ = 1 BOTH;
SQL> ALTER SYSTEM SET ‘PWD_MIN_LEN’ = 8 BOTH;
SQL> ALTER SYSTEM SET ‘PWD_COMPLEXITY’ = 1 BOTH;
SQL> ALTER SYSTEM SET ‘PWD_EXPIRE_TIME’ = 90 BOTH;
– 配置用户锁定策略
SQL> ALTER SYSTEM SET ‘FAILED_LOGIN_ATTEMPTS’ = 5 BOTH;
SQL> ALTER SYSTEM SET ‘PASSWORD_LOCK_TIME’ = 30 BOTH;
– 配置用户资源限制
SQL> CREATE PROFILE fgedu_profile LIMIT SESSIONS_PER_USER 10 CPU_PER_SESSION 3600 PRIVATE_SGA 10485760;
SQL> ALTER USER fgedu_user PROFILE fgedu_profile;
– 验证配置
SQL> SELECT * FROM dba_profiles WHERE profile = ‘FGEDU_PROFILE’;
# 输出结果
# PROFILE RESOURCE_NAME LIMIT
# ————- ——————————– ——————-
# FGEDU_PROFILE SESSIONS_PER_USER 10
# FGEDU_PROFILE CPU_PER_SESSION 3600
# FGEDU_PROFILE PRIVATE_SGA 10485760

2.2 权限管理

2.2.1 系统权限管理

# 1. 授予系统权限
– 授予创建会话权限
SQL> GRANT CREATE SESSION TO fgedu_user;
– 授予创建表权限
SQL> GRANT CREATE TABLE TO fgedu_user;
– 授予创建视图权限
SQL> GRANT CREATE VIEW TO fgedu_user;
– 授予创建存储过程权限 from DB视频:www.itpux.com
SQL> GRANT CREATE PROCEDURE TO fgedu_user;
# 2. 授予角色
– 授予角色给用户
SQL> GRANT CONNECT TO fgedu_user;
SQL> GRANT RESOURCE TO fgedu_user;
SQL> GRANT DBA TO fgedu_user;
– 授予自定义角色
SQL> CREATE ROLE fgedu_role;
SQL> GRANT CREATE SESSION, CREATE TABLE TO fgedu_role;
SQL> GRANT fgedu_role TO fgedu_user;
# 3. 查看系统权限
– 查看用户的系统权限
SQL> SELECT * FROM dba_sys_privs WHERE grantee = ‘FGEDU_USER’;
– 查看用户的角色
SQL> SELECT * FROM dba_role_privs WHERE grantee = ‘FGEDU_USER’;
– 查看角色的系统权限
SQL> SELECT * FROM dba_sys_privs WHERE grantee = ‘FGEDU_ROLE’;
# 4. 撤销系统权限
– 撤销系统权限
SQL> REVOKE CREATE TABLE FROM fgedu_user;
– 撤销角色
SQL> REVOKE fgedu_role FROM fgedu_user;
# 5. 实际示例
– 创建角色
SQL> CREATE ROLE fgedu_role;
– 授予权限给角色
SQL> GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO fgedu_role;
– 授予角色给用户
SQL> GRANT fgedu_role TO fgedu_user;
– 查看用户权限
SQL> SELECT * FROM dba_sys_privs WHERE grantee = ‘FGEDU_ROLE’;
# 输出结果
# GRANTEE PRIVILEGE ADMIN_OPTION
# ———— —————————– ————–
# FGEDU_ROLE CREATE SESSION NO
# FGEDU_ROLE CREATE TABLE NO
# FGEDU_ROLE CREATE VIEW NO

2.2.2 对象权限管理

# 1. 授予对象权限
– 授予表的SELECT权限
SQL> GRANT SELECT ON fgedu_user TO fgedu_fgedu_user2;
– 授予表的INSERT权限
SQL> GRANT INSERT ON fgedu_user TO fgedu_fgedu_user2;
– 授予表的UPDATE权限
SQL> GRANT UPDATE ON fgedu_user TO fgedu_fgedu_user2;
– 授予表的DELETE权限
SQL> GRANT DELETE ON fgedu_user TO fgedu_fgedu_user2;
– 授予表的所有权限
SQL> GRANT ALL ON fgedu_user TO fgedu_fgedu_user2;
# 2. 授予列权限
– 授予特定列的SELECT权限
SQL> GRANT SELECT(user_id, user_name) ON fgedu_user TO fgedu_fgedu_user2;
– 授予特定列的UPDATE权限
SQL> GRANT UPDATE(user_name) ON fgedu_user TO fgedu_fgedu_user2;
# 3. 查看对象权限
– 查看用户的对象权限
SQL> SELECT * FROM dba_tab_privs WHERE grantee = ‘FGEDU_USER2’;
– 查看表的权限
SQL> SELECT * FROM dba_tab_privs WHERE table_name = ‘FGEDU_USER’;
– 查看列权限
SQL> SELECT * FROM dba_col_privs WHERE table_name = ‘FGEDU_USER’;
# 4. 撤销对象权限
– 撤销表的SELECT权限
SQL> REVOKE SELECT ON fgedu_user FROM fgedu_fgedu_user2;
– 撤销表的所有权限
SQL> REVOKE ALL ON fgedu_user FROM fgedu_fgedu_user2;
# 5. 实际示例
– 授予对象权限
SQL> GRANT SELECT, INSERT, UPDATE ON fgedu_user TO fgedu_fgedu_user2;
– 查看对象权限
SQL> SELECT * FROM dba_tab_privs WHERE grantee = ‘FGEDU_USER2’ AND table_name = ‘FGEDU_USER’;
# 输出结果
# GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRANTABLE HIERARCHY
# ———— —— ———– ——– ———- ———- ———-
# FGEDU_USER2 FGEDU FGEDU_USER FGEDU SELECT NO NO
# FGEDU_USER2 FGEDU FGEDU_USER FGEDU INSERT NO NO
# FGEDU_USER2 FGEDU FGEDU_USER FGEDU UPDATE NO NO
– 撤销对象权限
SQL> REVOKE DELETE ON fgedu_user FROM fgedu_fgedu_user2;

2.3 审计管理

2.3.1 审计配置

# 1. 开启审计
– 开启审计功能
SQL> ALTER SYSTEM SET ‘AUDIT_ENABLE’ = 1 BOTH;
– 查看审计状态
SQL> SELECT * FROM v$parameter WHERE name = ‘AUDIT_ENABLE’;
# 2. 配置审计策略
– 配置语句级审计
SQL> AUDIT SELECT TABLE BY fgedu_user;
SQL> AUDIT INSERT TABLE BY fgedu_user;
SQL> AUDIT UPDATE TABLE BY fgedu_user;
SQL> AUDIT DELETE TABLE BY fgedu_user;
– 配置对象级审计
SQL> AUDIT SELECT ON fgedu_user BY ACCESS;
SQL> AUDIT INSERT ON fgedu_user BY ACCESS;
SQL> AUDIT UPDATE ON fgedu_user BY ACCESS;
SQL> AUDIT DELETE ON fgedu_user BY ACCESS;
– 配置权限级审计
SQL> AUDIT GRANT ANY PRIVILEGE BY ACCESS;
SQL> AUDIT GRANT ANY OBJECT PRIVILEGE BY ACCESS;
# 3. 配置审计日志
– 配置审计日志路径
SQL> ALTER SYSTEM SET ‘AUDIT_FILE_PATH’ = ‘/dm/audit’ BOTH;
– 配置审计日志文件大小(单位:MB)
SQL> ALTER SYSTEM SET ‘AUDIT_FILE_SIZE’ = 100 BOTH;
– 配置审计日志保留时间(单位:天)
SQL> ALTER SYSTEM SET ‘AUDIT_RETENTION’ = 90 BOTH;
# 4. 实际示例
– 开启审计功能
SQL> ALTER SYSTEM SET ‘AUDIT_ENABLE’ = 1 BOTH;
– 配置审计策略
SQL> AUDIT SELECT, INSERT, UPDATE, DELETE ON fgedu_user BY ACCESS;
– 配置审计日志
SQL> ALTER SYSTEM SET ‘AUDIT_FILE_PATH’ = ‘/dm/audit’ BOTH;
SQL> ALTER SYSTEM SET ‘AUDIT_FILE_SIZE’ = 100 BOTH;
SQL> ALTER SYSTEM SET ‘AUDIT_RETENTION’ = 90 BOTH;
– 验证审计配置
SQL> SELECT * FROM dba_audit_policies;
# 输出结果
# POLICY_NAME OBJECT_OWNER OBJECT_NAME AUDIT_OPTION AUDIT_TYPE
# ———— ————– ————- ————- ————
# FGEDU_AUDIT FGEDU FGEDU_USER SELECT OBJECT
# FGEDU_AUDIT FGEDU FGEDU_USER INSERT OBJECT
# FGEDU_AUDIT FGEDU FGEDU_USER UPDATE OBJECT
# FGEDU_AUDIT FGEDU FGEDU_USER DELETE OBJECT

2.3.2 审计查询

# 1. 查看审计记录
– 查看所有审计记录
SQL> SELECT * FROM dba_audit_trail;
– 查看特定用户的审计记录
SQL> SELECT * FROM dba_audit_trail WHERE username = ‘FGEDU_USER’;
– 查看特定对象的审计记录
SQL> SELECT * FROM dba_audit_trail WHERE obj_name = ‘FGEDU_USER’;
– 查看特定操作的审计记录
SQL> SELECT * FROM dba_audit_trail WHERE action_name = ‘SELECT’;
# 2. 查看审计统计信息
– 查看审计统计信息
SQL> SELECT * FROM dba_audit_stat;
– 查看审计策略统计信息
SQL> SELECT * FROM dba_audit_policy_stats;
# 3. 查看审计日志
– 查看审计日志文件
$ tail -f /dm/audit/audit.log
– 查看审计日志内容
# Audit record created at 2024-01-01 10:00:00
# Session ID: 100
# User: fgedu_user
# Action: SELECT
# Object: fgedu_user
# SQL: SELECT * FROM fgedu_user WHERE user_id = 1
# 4. 实际示例
– 查看审计记录
SQL> SELECT username, action_name, obj_name, sql_text, timestamp
FROM dba_audit_trail
WHERE username = ‘FGEDU_USER’
ORDER BY timestamp DESC
LIMIT 10;
# 输出结果
# USERNAME ACTION_NAME OBJ_NAME SQL_TEXT TIMESTAMP
# ————- ———— ———– —————————————– ——————-
# FGEDU_USER SELECT FGEDU_USER SELECT * FROM fgedu_user WHERE user_id = 1 2024-01-01 10:00:00
# FGEDU_USER INSERT FGEDU_USER INSERT INTO fgedu_user VALUES (1, ‘fgedu_user1’) 2024-01-01 09:59:00
# FGEDU_USER UPDATE FGEDU_USER UPDATE fgedu_user SET user_name = ‘fgedu_user1’ 2024-01-01 09:58:00
生产环境建议:根据业务需求和安全要求,制定完善的安全策略,配置合理的审计规则。定期审查用户权限,及时撤销不必要的权限。定期分析审计日志,发现异常行为。

Part03-生产环境项目实施方案

3.1 安全配置

3.1.1 网络安全配置

# 1. 配置防火墙
– 配置防火墙规则
$ firewall-cmd –permanent –add-port=5236/tcp
$ firewall-cmd –reload
– 查看防火墙规则
$ firewall-cmd –list-all
# 2. 配置网络隔离
– 配置VLAN
$ vlan add 100 name fgedu_vlan
$ vlan add 200 name fgedu_vlan
– 配置网络访问控制
$ iptables -A INPUT -s 192.168.1.0/24 -p tcp –dport 5236 -j ACCEPT
$ iptables -A INPUT -s 192.168.2.0/24 -p tcp –dport 5236 -j ACCEPT
$ iptables -A INPUT -p tcp –dport 5236 -j DROP
# 3. 配置SSL/TLS
– 生成SSL证书
$ openssl genrsa -out dm.key 2048
$ openssl req -new -key dm.key -out dm.csr
$ openssl x509 -req -days 365 -in dm.csr -signkey dm.key -out dm.crt
– 配置SSL/TLS
SQL> ALTER SYSTEM SET ‘SSL_ENABLE’ = 1 BOTH;
SQL> ALTER SYSTEM SET ‘SSL_CERT_FILE’ = ‘/dm/dm.crt’ BOTH;
SQL> ALTER SYSTEM SET ‘SSL_KEY_FILE’ = ‘/dm/dm.key’ BOTH;
# 4. 实际示例
– 配置防火墙
$ firewall-cmd –permanent –add-port=5236/tcp
$ firewall-cmd –reload
– 配置SSL/TLS
SQL> ALTER SYSTEM SET ‘SSL_ENABLE’ = 1 BOTH;
SQL> ALTER SYSTEM SET ‘SSL_CERT_FILE’ = ‘/dm/dm.crt’ BOTH;
SQL> ALTER SYSTEM SET ‘SSL_KEY_FILE’ = ‘/dm/dm.key’ BOTH;
– 验证SSL/TLS配置
SQL> SELECT * FROM v$parameter WHERE name LIKE ‘SSL%’;
# 输出结果
# NAME VALUE
# ————— ———-
# SSL_ENABLE 1
# SSL_CERT_FILE /dm/dm.crt
# SSL_KEY_FILE /dm/dm.key

3.1.2 数据库安全配置

# 1. 配置用户安全
– 配置密码策略
SQL> ALTER SYSTEM SET ‘PWD_POLICY’ = 1 BOTH;
SQL> ALTER SYSTEM SET ‘PWD_MIN_LEN’ = 8 BOTH;
SQL> ALTER SYSTEM SET ‘PWD_COMPLEXITY’ = 1 BOTH;
SQL> ALTER SYSTEM SET ‘PWD_EXPIRE_TIME’ = 90 BOTH;
– 配置用户锁定策略
SQL> ALTER SYSTEM SET ‘FAILED_LOGIN_ATTEMPTS’ = 5 BOTH;
SQL> ALTER SYSTEM SET ‘PASSWORD_LOCK_TIME’ = 30 BOTH;
# 2. 配置权限安全
– 撤销不必要的权限
SQL> REVOKE DBA FROM fgedu_user;
SQL> REVOKE RESOURCE FROM fgedu_user;
– 配置最小权限原则
SQL> GRANT CREATE SESSION TO fgedu_user;
SQL> GRANT SELECT, INSERT, UPDATE, DELETE ON fgedu_user TO fgedu_user;
# 3. 配置数据加密
– 配置透明数据加密(TDE)
SQL> ALTER SYSTEM SET ‘TDE_ENABLE’ = 1 BOTH;
SQL> ALTER SYSTEM SET ‘TDE_KEY_FILE’ = ‘/dm/tde.key’ BOTH;
– 配置列加密
SQL> ALTER TABLE fgedu_user MODIFY user_name ENCRYPT;
# 4. 配置审计安全
– 开启审计功能
SQL> ALTER SYSTEM SET ‘AUDIT_ENABLE’ = 1 BOTH;
– 配置审计策略
SQL> AUDIT SELECT, INSERT, UPDATE, DELETE ON fgedu_user BY ACCESS;
# 5. 实际示例
– 配置密码策略
SQL> ALTER SYSTEM SET ‘PWD_POLICY’ = 1 BOTH;
SQL> ALTER SYSTEM SET ‘PWD_MIN_LEN’ = 8 BOTH;
SQL> ALTER SYSTEM SET ‘PWD_COMPLEXITY’ = 1 BOTH;
SQL> ALTER SYSTEM SET ‘PWD_EXPIRE_TIME’ = 90 BOTH;
– 配置用户锁定策略
SQL> ALTER SYSTEM SET ‘FAILED_LOGIN_ATTEMPTS’ = 5 BOTH;
SQL> ALTER SYSTEM SET ‘PASSWORD_LOCK_TIME’ = 30 BOTH;
– 配置数据加密
SQL> ALTER SYSTEM SET ‘TDE_ENABLE’ = 1 BOTH;
SQL> ALTER SYSTEM SET ‘TDE_KEY_FILE’ = ‘/dm/tde.key’ BOTH;
– 配置审计安全
SQL> ALTER SYSTEM SET ‘AUDIT_ENABLE’ = 1 BOTH;
SQL> AUDIT SELECT, INSERT, UPDATE, DELETE ON fgedu_user BY ACCESS;
– 验证安全配置
SQL> SELECT * FROM v$parameter WHERE name IN (‘PWD_POLICY’, ‘PWD_MIN_LEN’, ‘PWD_COMPLEXITY’, ‘PWD_EXPIRE_TIME’, ‘FAILED_LOGIN_ATTEMPTS’, ‘PASSWORD_LOCK_TIME’, ‘TDE_ENABLE’, ‘AUDIT_ENABLE’);
# 输出结果
# NAME VALUE
# ———————– ———-
# PWD_POLICY 1
# PWD_MIN_LEN 8
# PWD_COMPLEXITY 1
# PWD_EXPIRE_TIME 90
# FAILED_LOGIN_ATTEMPTS 5
# PASSWORD_LOCK_TIME 30
# TDE_ENABLE 1
# AUDIT_ENABLE 1

3.2 审计配置

3.2.1 审计策略配置

# 1. 配置语句级审计
– 审计所有SELECT语句
SQL> AUDIT SELECT TABLE BY ACCESS;
– 审计所有INSERT语句
SQL> AUDIT INSERT TABLE BY ACCESS;
– 审计所有UPDATE语句
SQL> AUDIT UPDATE TABLE BY ACCESS;
– 审计所有DELETE语句
SQL> AUDIT DELETE TABLE BY ACCESS;
# 2. 配置对象级审计
– 审计特定表的所有操作
SQL> AUDIT ALL ON fgedu_user BY ACCESS;
– 审计特定表的SELECT操作
SQL> AUDIT SELECT ON fgedu_user BY ACCESS;
– 审计特定表的INSERT操作
SQL> AUDIT INSERT ON fgedu_user BY ACCESS;
# 3. 配置权限级审计
– 审计所有权限授予
SQL> AUDIT GRANT ANY PRIVILEGE BY ACCESS;
– 审计所有对象权限授予
SQL> AUDIT GRANT ANY OBJECT PRIVILEGE BY ACCESS;
– 审计所有权限撤销
SQL> AUDIT REVOKE ANY PRIVILEGE BY ACCESS;
# 4. 配置会话级审计
– 审计所有登录操作
SQL> AUDIT SESSION BY ACCESS;
– 审计所有登出操作
SQL> AUDIT LOGOFF BY ACCESS;
# 5. 实际示例
– 配置语句级审计
SQL> AUDIT SELECT, INSERT, UPDATE, DELETE TABLE BY ACCESS;
– 配置对象级审计
SQL> AUDIT ALL ON fgedu_user BY ACCESS;
– 配置权限级审计
SQL> AUDIT GRANT ANY PRIVILEGE, GRANT ANY OBJECT PRIVILEGE BY ACCESS;
– 配置会话级审计
SQL> AUDIT SESSION BY ACCESS;
– 验证审计配置
SQL> SELECT * FROM dba_audit_policies;
# 输出结果
# POLICY_NAME OBJECT_OWNER OBJECT_NAME AUDIT_OPTION AUDIT_TYPE
# —————- ————– ————- ————- ————
# FGEDU_STMT_AUDIT NULL NULL SELECT STATEMENT
# FGEDU_STMT_AUDIT NULL NULL INSERT STATEMENT
# FGEDU_STMT_AUDIT NULL NULL UPDATE STATEMENT
# FGEDU_STMT_AUDIT NULL NULL DELETE STATEMENT
# FGEDU_OBJ_AUDIT FGEDU FGEDU_USER ALL OBJECT
# FGEDU_PRIV_AUDIT NULL NULL GRANT PRIVILEGE

3.2.2 审计日志管理

# 1. 配置审计日志
– 配置审计日志路径
SQL> ALTER SYSTEM SET ‘AUDIT_FILE_PATH’ = ‘/dm/audit’ BOTH;
– 配置审计日志文件大小(单位:MB)
SQL> ALTER SYSTEM SET ‘AUDIT_FILE_SIZE’ = 100 BOTH;
– 配置审计日志保留时间(单位:天)
SQL> ALTER SYSTEM SET ‘AUDIT_RETENTION’ = 90 BOTH;
# 2. 管理审计日志
– 查看审计日志文件
$ ls -lh /dm/audit/
– 清理过期审计日志
$ find /dm/audit -name “*.log” -mtime +90 -delete
– 备份审计日志
$ tar -czf audit_backup_20240101.tar.gz /dm/audit/*.log
# 3. 分析审计日志
– 查看审计统计信息
SQL> SELECT * FROM dba_audit_stat;
– 查看审计策略统计信息
SQL> SELECT * FROM dba_audit_policy_stats;
– 查看审计记录
SQL> SELECT username, action_name, obj_name, sql_text, timestamp
FROM dba_audit_trail
WHERE timestamp > SYSDATE – 1
ORDER BY timestamp DESC;
# 4. 实际示例
– 配置审计日志
SQL> ALTER SYSTEM SET ‘AUDIT_FILE_PATH’ = ‘/dm/audit’ BOTH;
SQL> ALTER SYSTEM SET ‘AUDIT_FILE_SIZE’ = 100 BOTH;
SQL> ALTER SYSTEM SET ‘AUDIT_RETENTION’ = 90 BOTH;
– 查看审计日志文件
$ ls -lh /dm/audit/
# 输出结果
# total 100M
# -rw-r–r– 1 dmdba dinstall 100M Jan 1 10:00 audit.log
– 查看审计记录
SQL> SELECT username, action_name, obj_name, sql_text, timestamp
FROM dba_audit_trail
WHERE timestamp > SYSDATE – 1
ORDER BY timestamp DESC
LIMIT 10;
# 输出结果
# USERNAME ACTION_NAME OBJ_NAME SQL_TEXT TIMESTAMP
# ————- ———— ———– —————————————– ——————-
# FGEDU_USER SELECT FGEDU_USER SELECT * FROM fgedu_user WHERE user_id = 1 2024-01-01 10:00:00
# FGEDU_USER INSERT FGEDU_USER INSERT INTO fgedu_user VALUES (1, ‘fgedu_user1’) 2024-01-01 09:59:00

3.3 安全监控

3.3.1 安全事件监控

# 1. 监控用户登录
– 查看用户登录记录
SQL> SELECT * FROM dba_audit_trail WHERE action_name = ‘LOGON’;
– 查看用户登出记录
SQL> SELECT * FROM dba_audit_trail WHERE action_name = ‘LOGOFF’;
– 查看用户登录失败记录
SQL> SELECT * FROM dba_audit_trail WHERE action_name = ‘LOGON’ AND returncode != 0;
# 2. 监控权限变更
– 查看权限授予记录
SQL> SELECT * FROM dba_audit_trail WHERE action_name = ‘GRANT’;
– 查看权限撤销记录
SQL> SELECT * FROM dba_audit_trail WHERE action_name = ‘REVOKE’;
– 查看角色授予记录
SQL> SELECT * FROM dba_audit_trail WHERE action_name = ‘GRANT ROLE’;
# 3. 监控数据变更
– 查看数据插入记录
SQL> SELECT * FROM dba_audit_trail WHERE action_name = ‘INSERT’;
– 查看数据更新记录
SQL> SELECT * FROM dba_audit_trail WHERE action_name = ‘UPDATE’;
– 查看数据删除记录
SQL> SELECT * FROM dba_audit_trail WHERE action_name = ‘DELETE’;
# 4. 实际示例
– 查看用户登录记录
SQL> SELECT username, action_name, timestamp, returncode
FROM dba_audit_trail
WHERE action_name = ‘LOGON’
ORDER BY timestamp DESC
LIMIT 10;
# 输出结果
# USERNAME ACTION_NAME TIMESTAMP RETURNCODE
# ————- ———— ——————- ———-
# FGEDU_USER LOGON 2024-01-01 10:00:00 0
# FGEDU_USER LOGON 2024-01-01 09:00:00 0
# FGEDU_USER LOGON 2024-01-01 08:00:00 0
– 查看数据变更记录
SQL> SELECT username, action_name, obj_name, sql_text, timestamp
FROM dba_audit_trail
WHERE action_name IN (‘INSERT’, ‘UPDATE’, ‘DELETE’)
ORDER BY timestamp DESC
LIMIT 10;
# 输出结果
# USERNAME ACTION_NAME OBJ_NAME SQL_TEXT TIMESTAMP
# ————- ———— ———– —————————————– ——————-
# FGEDU_USER INSERT FGEDU_USER INSERT INTO fgedu_user VALUES (1, ‘fgedu_user1’) 2024-01-01 10:00:00
# FGEDU_USER UPDATE FGEDU_USER UPDATE fgedu_user SET user_name = ‘fgedu_user1’ 2024-01-01 09:59:00

3.3.2 安全告警

# 1. 配置安全告警
– 配置登录失败告警
SQL> CREATE PROCEDURE sp_login_failed_alert()
AS
BEGIN
SELECT username, timestamp, returncode
FROM dba_audit_trail
WHERE action_name = ‘LOGON’ AND returncode != 0 AND timestamp > SYSDATE – 1/24;
END;
– 配置权限变更告警
SQL> CREATE PROCEDURE sp_privilege_change_alert()
AS
BEGIN
SELECT username, action_name, obj_name, sql_text, timestamp
FROM dba_audit_trail
WHERE action_name IN (‘GRANT’, ‘REVOKE’) AND timestamp > SYSDATE – 1/24;
END;
– 配置数据变更告警
SQL> CREATE PROCEDURE sp_data_change_alert()
AS
BEGIN
SELECT username, action_name, obj_name, sql_text, timestamp
FROM dba_audit_trail
WHERE action_name IN (‘INSERT’, ‘UPDATE’, ‘DELETE’) AND timestamp > SYSDATE – 1/24;
END;
# 2. 查看安全告警
– 查看登录失败告警
SQL> EXEC sp_login_failed_alert();
– 查看权限变更告警
SQL> EXEC sp_privilege_change_alert();
– 查看数据变更告警
SQL> EXEC sp_data_change_alert();
# 3. 实际示例
– 配置安全告警
SQL> CREATE PROCEDURE sp_security_alert()
AS
BEGIN
SELECT username, action_name, obj_name, sql_text, timestamp
FROM dba_audit_trail
WHERE action_name IN (‘GRANT’, ‘REVOKE’, ‘INSERT’, ‘UPDATE’, ‘DELETE’)
AND timestamp > SYSDATE – 1/24
ORDER BY timestamp DESC;
END;
– 查看安全告警
SQL> EXEC sp_security_alert();
# 输出结果
# USERNAME ACTION_NAME OBJ_NAME SQL_TEXT TIMESTAMP
# ————- ———— ———– —————————————– ——————-
# FGEDU_USER GRANT NULL GRANT CREATE TABLE TO fgedu_fgedu_user2 2024-01-01 10:00:00
# FGEDU_USER INSERT FGEDU_USER INSERT INTO fgedu_user VALUES (1, ‘fgedu_user1’) 2024-01-01 09:59:00
风哥提示:安全监控是数据库安全管理的重要工作,使用监控工具可以及时发现和解决安全问题。建立完善的监控体系,是保障数据库安全的关键。

Part04-生产案例与实战讲解

4.1 用户权限管理案例

4.1.1 案例描述

某企业需要为不同部门的用户分配不同的权限,实现最小权限原则,保障数据库安全。

4.1.2 实施步骤

# 1. 创建角色
– 创建部门角色
SQL> CREATE ROLE fgedu_dept1_role;
SQL> CREATE ROLE fgedu_dept2_role;
SQL> CREATE ROLE fgedu_dept3_role;
# 2. 授予角色权限
– 授予部门1角色权限
SQL> GRANT CREATE SESSION TO fgedu_dept1_role;
SQL> GRANT SELECT, INSERT, UPDATE, DELETE ON fgedu_dept1_table TO fgedu_dept1_role;
– 授予部门2角色权限
SQL> GRANT CREATE SESSION TO fgedu_dept2_role;
SQL> GRANT SELECT, INSERT, UPDATE, DELETE ON fgedu_dept2_table TO fgedu_dept2_role;
– 授予部门3角色权限
SQL> GRANT CREATE SESSION TO fgedu_dept3_role;
SQL> GRANT SELECT, INSERT, UPDATE, DELETE ON fgedu_dept3_table TO fgedu_dept3_role;
# 3. 创建用户
– 创建部门1用户
SQL> CREATE USER fgedu_dept1_fgedu_user1 IDENTIFIED BY ‘Fgedu123456’ DEFAULT TABLESPACE fgedu TEMPORARY TABLESPACE fgedu_temp;
SQL> CREATE USER fgedu_dept1_fgedu_user2 IDENTIFIED BY ‘Fgedu123456’ DEFAULT TABLESPACE fgedu TEMPORARY TABLESPACE fgedu_temp;
– 创建部门2用户
SQL> CREATE USER fgedu_dept2_fgedu_user1 IDENTIFIED BY ‘Fgedu123456’ DEFAULT TABLESPACE fgedu TEMPORARY TABLESPACE fgedu_temp;
SQL> CREATE USER fgedu_dept2_fgedu_user2 IDENTIFIED BY ‘Fgedu123456’ DEFAULT TABLESPACE fgedu TEMPORARY TABLESPACE fgedu_temp;
– 创建部门3用户
SQL> CREATE USER fgedu_dept3_fgedu_user1 IDENTIFIED BY ‘Fgedu123456’ DEFAULT TABLESPACE fgedu TEMPORARY TABLESPACE fgedu_temp;
SQL> CREATE USER fgedu_dept3_fgedu_user2 IDENTIFIED BY ‘Fgedu123456’ DEFAULT TABLESPACE fgedu TEMPORARY TABLESPACE fgedu_temp;
# 4. 授予用户角色
– 授予部门1用户角色
SQL> GRANT fgedu_dept1_role TO fgedu_dept1_fgedu_user1;
SQL> GRANT fgedu_dept1_role TO fgedu_dept1_fgedu_user2;
– 授予部门2用户角色
SQL> GRANT fgedu_dept2_role TO fgedu_dept2_fgedu_user1;
SQL> GRANT fgedu_dept2_role TO fgedu_dept2_fgedu_user2;
– 授予部门3用户角色
SQL> GRANT fgedu_dept3_role TO fgedu_dept3_fgedu_user1;
SQL> GRANT fgedu_dept3_role TO fgedu_dept3_fgedu_user2;
# 5. 验证用户权限
– 查看用户角色
SQL> SELECT * FROM dba_role_privs WHERE grantee IN (‘FGEDU_DEPT1_USER1’, ‘FGEDU_DEPT2_USER1’, ‘FGEDU_DEPT3_USER1’);
# 输出结果
# GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
# —————— ——————– ————– ————-
# FGEDU_DEPT1_USER1 FGEDU_DEPT1_ROLE NO YES
# FGEDU_DEPT2_USER1 FGEDU_DEPT2_ROLE NO YES
# FGEDU_DEPT3_USER1 FGEDU_DEPT3_ROLE NO YES
– 查看用户权限
SQL> SELECT * FROM dba_tab_privs WHERE grantee IN (‘FGEDU_DEPT1_ROLE’, ‘FGEDU_DEPT2_ROLE’, ‘FGEDU_DEPT3_ROLE’);
# 输出结果
# GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRANTABLE HIERARCHY
# —————— —— ——————- ——– ———- ———- ———-
# FGEDU_DEPT1_ROLE FGEDU FGEDU_DEPT1_TABLE FGEDU SELECT NO NO
# FGEDU_DEPT1_ROLE FGEDU FGEDU_DEPT1_TABLE FGEDU INSERT NO NO
# FGEDU_DEPT1_ROLE FGEDU FGEDU_DEPT1_TABLE FGEDU UPDATE NO NO
# FGEDU_DEPT1_ROLE FGEDU FGEDU_DEPT1_TABLE FGEDU DELETE NO NO
# FGEDU_DEPT2_ROLE FGEDU FGEDU_DEPT2_TABLE FGEDU SELECT NO NO
# FGEDU_DEPT2_ROLE FGEDU FGEDU_DEPT2_TABLE FGEDU INSERT NO NO
# FGEDU_DEPT2_ROLE FGEDU FGEDU_DEPT2_TABLE FGEDU UPDATE NO NO
# FGEDU_DEPT2_ROLE FGEDU FGEDU_DEPT2_TABLE FGEDU DELETE NO NO
# FGEDU_DEPT3_ROLE FGEDU FGEDU_DEPT3_TABLE FGEDU SELECT NO NO
# FGEDU_DEPT3_ROLE FGEDU FGEDU_DEPT3_TABLE FGEDU INSERT NO NO
# FGEDU_DEPT3_ROLE FGEDU FGEDU_DEPT3_TABLE FGEDU UPDATE NO NO
# FGEDU_DEPT3_ROLE FGEDU FGEDU_DEPT3_TABLE FGEDU DELETE NO NO
# 6. 实施结果
– 角色创建成功
– 用户创建成功
– 权限分配成功
– 最小权限原则得到实现

4.2 审计配置案例

4.2.1 案例描述

某企业需要配置数据库审计,监控数据库操作,满足合规要求。

4.2.2 实施步骤

# 1. 开启审计功能
– 开启审计功能
SQL> ALTER SYSTEM SET ‘AUDIT_ENABLE’ = 1 BOTH;
– 查看审计状态
SQL> SELECT * FROM v$parameter WHERE name = ‘AUDIT_ENABLE’;
# 输出结果
# NAME VALUE
# ———— ———-
# AUDIT_ENABLE 1
# 2. 配置审计策略
– 配置语句级审计
SQL> AUDIT SELECT, INSERT, UPDATE, DELETE TABLE BY ACCESS;
– 配置对象级审计
SQL> AUDIT ALL ON fgedu_user BY ACCESS;
SQL> AUDIT ALL ON fgedu_order BY ACCESS;
SQL> AUDIT ALL ON fgedu_product BY ACCESS;
– 配置权限级审计
SQL> AUDIT GRANT ANY PRIVILEGE, GRANT ANY OBJECT PRIVILEGE BY ACCESS;
– 配置会话级审计
SQL> AUDIT SESSION BY ACCESS;
# 3. 配置审计日志
– 配置审计日志路径
SQL> ALTER SYSTEM SET ‘AUDIT_FILE_PATH’ = ‘/dm/audit’ BOTH;
– 配置审计日志文件大小(单位:MB)
SQL> ALTER SYSTEM SET ‘AUDIT_FILE_SIZE’ = 100 BOTH;
– 配置审计日志保留时间(单位:天)
SQL> ALTER SYSTEM SET ‘AUDIT_RETENTION’ = 90 BOTH;
– 创建审计日志目录
$ mkdir -p /dm/audit
$ chown -R dmdba:dinstall /dm/audit
# 4. 验证审计配置
– 查看审计策略
SQL> SELECT * FROM dba_audit_policies;
# 输出结果
# POLICY_NAME OBJECT_OWNER OBJECT_NAME AUDIT_OPTION AUDIT_TYPE
# —————- ————– ————- ————- ————
# FGEDU_STMT_AUDIT NULL NULL SELECT STATEMENT
# FGEDU_STMT_AUDIT NULL NULL INSERT STATEMENT
# FGEDU_STMT_AUDIT NULL NULL UPDATE STATEMENT
# FGEDU_STMT_AUDIT NULL NULL DELETE STATEMENT
# FGEDU_OBJ_AUDIT FGEDU FGEDU_USER ALL OBJECT
# FGEDU_OBJ_AUDIT FGEDU FGEDU_ORDER ALL OBJECT
# FGEDU_OBJ_AUDIT FGEDU FGEDU_PRODUCT ALL OBJECT
# FGEDU_PRIV_AUDIT NULL NULL GRANT PRIVILEGE
# FGEDU_SESSION_AUDIT NULL NULL SESSION SESSION
– 查看审计日志文件
$ ls -lh /dm/audit/
# 输出结果
# total 100M
# -rw-r–r– 1 dmdba dinstall 100M Jan 1 10:00 audit.log
# 5. 测试审计功能
– 执行测试操作
SQL> INSERT INTO fgedu_user VALUES (1, ‘fgedu_user1’, ‘fgedu_user1@fgedu.net.cn’);
SQL> UPDATE fgedu_user SET user_name = ‘fgedu_user1’ WHERE user_id = 1;
SQL> SELECT * FROM fgedu_user WHERE user_id = 1;
SQL> DELETE FROM fgedu_user WHERE user_id = 1;
– 查看审计记录
SQL> SELECT username, action_name, obj_name, sql_text, timestamp
FROM dba_audit_trail
WHERE username = ‘FGEDU_USER’
ORDER BY timestamp DESC;
# 输出结果
# USERNAME ACTION_NAME OBJ_NAME SQL_TEXT TIMESTAMP
# ————- ———— ———– —————————————– ——————-
# FGEDU_USER DELETE FGEDU_USER DELETE FROM fgedu_user WHERE user_id = 1 2024-01-01 10:00:00
# FGEDU_USER SELECT FGEDU_USER SELECT * FROM fgedu_user WHERE user_id = 1 2024-01-01 09:59:00
# FGEDU_USER UPDATE FGEDU_USER UPDATE fgedu_user SET user_name = ‘fgedu_user1’ 2024-01-01 09:58:00
# FGEDU_USER INSERT FGEDU_USER INSERT INTO fgedu_user VALUES (1, ‘fgedu_user1’) 2024-01-01 09:57:00
# 6. 实施结果
– 审计功能开启成功
– 审计策略配置成功
– 审计日志配置成功
– 审计功能测试成功

4.3 安全事件处理案例

4.3.1 案例描述

某企业数据库发生安全事件,发现异常登录行为,需要及时处理。

4.3.2 处理步骤

# 1. 发现安全事件
– 查看审计日志
SQL> SELECT username, action_name, timestamp, returncode
FROM dba_audit_trail
WHERE action_name = ‘LOGON’
ORDER BY timestamp DESC
LIMIT 10;
# 输出结果
# USERNAME ACTION_NAME TIMESTAMP RETURNCODE
# ————- ———— ——————- ———-
# FGEDU_USER LOGON 2024-01-01 10:00:00 0
# FGEDU_USER LOGON 2024-01-01 09:59:00 0
# FGEDU_USER LOGON 2024-01-01 09:58:00 0
# UNKNOWN_USER LOGON 2024-01-01 09:57:00 28001
– 查看登录失败记录
SQL> SELECT username, action_name, timestamp, returncode
FROM dba_audit_trail
WHERE action_name = ‘LOGON’ AND returncode != 0
ORDER BY timestamp DESC;
# 输出结果
# USERNAME ACTION_NAME TIMESTAMP RETURNCODE
# ————- ———— ——————- ———-
# UNKNOWN_USER LOGON 2024-01-01 09:57:00 28001
# UNKNOWN_USER LOGON 2024-01-01 09:56:00 28001
# UNKNOWN_USER LOGON 2024-01-01 09:55:00 28001
# 2. 分析安全事件
– 查看异常登录的详细信息
SQL> SELECT * FROM dba_audit_trail
WHERE username = ‘UNKNOWN_USER’
ORDER BY timestamp DESC;
# 输出结果
# USERNAME ACTION_NAME OBJ_NAME SQL_TEXT TIMESTAMP RETURNCODE
# ————- ———— ——— ——— ——————- ———-
# UNKNOWN_USER LOGON NULL NULL 2024-01-01 09:57:00 28001
# UNKNOWN_USER LOGON NULL NULL 2024-01-01 09:56:00 28001
# UNKNOWN_USER LOGON NULL NULL 2024-01-01 09:55:00 28001
– 查看当前会话
SQL> SELECT * FROM v$session WHERE username = ‘UNKNOWN_USER’;
# 输出结果
# SID SERIAL
# USERNAME STATUS LOGON_TIME MACHINE
# —- ——– ———— ——– ——————- —————
# 100 12345 UNKNOWN_USER INACTIVE 2024-01-01 09:57:00 192.168.1.100
# 3. 处理安全事件
– 锁定异常用户
SQL> ALTER USER UNKNOWN_USER ACCOUNT LOCK;
– 断开异常会话
SQL> ALTER SYSTEM DISCONNECT SESSION ‘100,12345’;
– 查看用户状态
SQL> SELECT username, account_status FROM dba_users WHERE username = ‘UNKNOWN_USER’;
# 输出结果
# USERNAME ACCOUNT_STATUS
# ————- —————
# UNKNOWN_USER LOCKED
# 4. 加强安全措施
– 配置防火墙规则
$ iptables -A INPUT -s 192.168.1.100 -j DROP
– 配置用户锁定策略
SQL> ALTER SYSTEM SET ‘FAILED_LOGIN_ATTEMPTS’ = 3 BOTH;
SQL> ALTER SYSTEM SET ‘PASSWORD_LOCK_TIME’ = 60 BOTH;
– 开启审计告警
SQL> CREATE PROCEDURE sp_login_failed_alert()
AS
BEGIN
SELECT username, timestamp, returncode
FROM dba_audit_trail
WHERE action_name = ‘LOGON’ AND returncode != 0 AND timestamp > SYSDATE – 1/24;
END;
# 5. 验证安全措施
– 查看用户锁定策略
SQL> SELECT * FROM v$parameter WHERE name IN (‘FAILED_LOGIN_ATTEMPTS’, ‘PASSWORD_LOCK_TIME’);
# 输出结果
# NAME VALUE
# ———————– ———-
# FAILED_LOGIN_ATTEMPTS 3
# PASSWORD_LOCK_TIME 60
– 查看防火墙规则
$ iptables -L -n | grep 192.168.1.100
# 输出结果
# DROP all — 192.168.1.100 0.0.0.0/0
# 6. 实施结果
– 异常用户锁定成功
– 异常会话断开成功
– 防火墙规则配置成功
– 用户锁定策略配置成功
– 审计告警配置成功
生产环境建议:在发生安全事件时,要及时处理,防止安全事件扩大。建立完善的安全监控体系,及时发现和解决安全问题。定期进行安全演练,提高安全事件处理能力。

Part05-风哥经验总结与分享

5.1 安全管理最佳实践

DM数据库安全管理最佳实践:

  • 最小权限原则:用户只拥有完成工作所需的最小权限
  • 职责分离原则:将关键操作分配给不同的用户
  • 定期审查权限:定期审查用户权限,及时撤销不必要的权限
  • 强密码策略:配置强密码策略,强制用户使用复杂密码
  • 定期修改密码:定期修改密码,防止密码泄露
  • 开启审计功能:开启审计功能,监控数据库操作
  • 定期分析审计日志:定期分析审计日志,发现异常行为
  • 数据加密:对敏感数据进行加密,防止数据泄露
  • 网络安全:配置防火墙和网络隔离,防止网络攻击
  • 定期安全演练:定期进行安全演练,提高安全事件处理能力

5.2 常见问题与解决方案

# 1. 权限过大问题
– 症状:用户权限过大,存在安全风险
– 原因:权限分配不合理,未遵循最小权限原则
– 解决方案:审查用户权限,撤销不必要的权限,遵循最小权限原则
# 2. 密码泄露问题
– 症状:用户密码泄露,存在安全风险
– 原因:密码策略不合理,用户密码过于简单
– 解决方案:配置强密码策略,强制用户修改密码
# 3. 审计日志过大问题
– 症状:审计日志文件过大,占用大量磁盘空间
– 原因:审计策略过于详细,审计日志保留时间过长
– 解决方案:优化审计策略,定期清理过期审计日志
# 4. 异常登录问题
– 症状:发现异常登录行为,存在安全风险
– 原因:用户密码泄露,或者存在暴力破解
– 解决方案:锁定异常用户,加强密码策略,配置防火墙规则
# 5. 数据泄露问题
– 症状:敏感数据泄露,存在安全风险
– 原因:数据未加密,或者权限控制不合理
– 解决方案:对敏感数据进行加密,优化权限控制

5.3 安全管理检查清单

DM数据库安全管理检查清单:

  • 用户管理检查:用户创建是否合理,是否存在多余用户
  • 权限管理检查:权限分配是否合理,是否存在权限过大
  • 密码策略检查:密码策略是否合理,是否配置强密码策略
  • 审计配置检查:审计功能是否开启,审计策略是否合理
  • 审计日志检查:审计日志是否定期分析,是否存在异常行为
  • 数据加密检查:敏感数据是否加密,加密算法是否安全
  • 网络安全检查:防火墙是否配置,网络隔离是否合理
  • 安全监控检查:安全监控是否完善,告警是否及时
  • 安全演练检查:是否定期进行安全演练,演练结果是否正常
  • 安全策略检查:安全策略是否完善,是否定期审查
持续改进:数据库安全管理是一个持续的过程,需要根据业务需求和安全要求,不断调整和优化安全策略,确保数据库的安全。建立完善的监控体系,是保障数据库安全的关键。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息