1. 数据库安全和审计
数据库的整体安全性和审计工作包括:
配置和管理数据库安全策略
DBA需要配置数据库用户的权限和角色,以确保只有经过授权的用户才能访问和操作数据库。例如,在CentOS上的MySQL数据库中,DBA可以使用以下命令为用户授予SELECT权限: GRANT SELECT ON database_name.* TO 'username'@'host';执行审计策略
DBA需要制定和实施审计策略,以监控和记录数据库活动。例如,使用Oracle数据库,DBA可以创建审计策略来记录所有对表的SELECT操作: AUDIT SELECT ON hr.employees;监控数据库活动
DBA需要实时监控数据库活动,识别和响应异常操作。例如,可以配置告警系统,当检测到大量的登录失败尝试时,发送通知给DBA。 确保数据的机密性和完整性
通过定期备份数据和实施数据加密措施,DBA确保数据在存储和传输过程中不被未授权访问或篡改。例如,在CentOS上的PostgreSQL中,启用数据加密可以使用如下配置: ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
2. 启用统一审计
统一审计是一种整合多个审计功能的方法,简化了审计策略的管理。启用统一审计可以确保所有相关的审计活动集中管理。例如,在Oracle数据库中,启用统一审计的步骤如下:
确认数据库是否启用统一审计
SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';启用统一审计
如果尚未启用,需要进行数据库实例的重启,并通过以下命令启用统一审计: sqlplus / as sysdba
SHUTDOWN IMMEDIATE
STARTUP UPGRADE
ALTER SYSTEM SET AUDIT_TRAIL=DB,EXTENDED SCOPE=SPFILE;
SHUTDOWN IMMEDIATE
STARTUP
3. 创建统一的审计策略
通过创建统一的审计策略,可以对不同的数据库操作和活动进行集中审计。例如,在CentOS上的Oracle数据库中,可以创建一个策略来审计所有对关键表的SELECT操作:
创建审计策略
CREATE AUDIT POLICY select_emp_pol
ACTIONS SELECT ON hr.employees;启用审计策略
AUDIT POLICY select_emp_pol;验证审计策略
执行一些SELECT操作,然后检查审计日志: SELECT * FROM DBA_AUDIT_TRAIL WHERE OBJECT_NAME='EMPLOYEES';
4. 维护审计追踪
维护审计追踪意味着定期检查和管理审计日志,确保审计数据的完整性和可用性。DBA需要设置策略来保留、存档和清理审计日志。例如,在CentOS上的MySQL中,可以设置审计日志的轮替和存档策略:
配置审计日志
[mysqld]
audit-log=FORCE_PLUS_PERMANENT
audit-log-file=/var/log/mysql/audit.log设置日志轮替
使用logrotate工具配置日志文件轮替和存档: /var/log/mysql/audit.log {
daily
rotate 7
compress
missingok
notifempty
create 640 mysql mysql
postrotate
usr/bin/mysqladmin flush-logs
endscript
}清理旧日志
定期检查并清理旧的审计日志文件,确保存储空间充足。
通过上述步骤,DBA可以有效地管理和维护数据库的安全性和审计功能,确保数据的机密性、完整性和可用性。
限制对数据和服务的访问
通过设置用户权限和角色,限制谁可以访问和操作哪些数据。例如,只有具有特定角色的用户才能对某些表进行UPDATE操作。以下是在CentOS上使用MySQL数据库的详细举例:
创建角色和用户
CREATE ROLE update_role;
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'password';授予角色权限
GRANT UPDATE ON database_name.table_name TO update_role;将角色分配给用户
GRANT update_role TO 'user1'@'localhost';验证权限
使用
user1
登录并尝试更新table_name
表的数据:UPDATE database_name.table_name SET column_name='value' WHERE condition;如果
user1
没有update_role
,尝试更新将会失败。
用户身份验证
通过验证用户身份来确保只有授权用户才能访问数据库。常见的方法包括密码验证、多因素认证等。以下是在CentOS上使用PostgreSQL的详细举例:
设置用户密码
CREATE USER user2 WITH PASSWORD 'securepassword';配置PostgreSQL进行密码验证
编辑
pg_hba.conf
文件:# TYPE DATABASE USER ADDRESS METHOD
host all user2 192.168.1.0/24 md5重新加载配置:
sudo systemctl reload postgresql多因素认证
安装PAM(可插入式认证模块)并配置PostgreSQL使用PAM:
sudo yum install pam pam-devel编辑
pg_hba.conf
文件,添加PAM认证:host all user2 192.168.1.0/24 pam配置PAM模块,如使用Google Authenticator:
sudo yum install epel-release
sudo yum install google-authenticator
sudo google-authenticator
监控可疑活动
通过审计和监控数据库活动,及时发现并响应异常或可疑操作。例如,可以配置审计策略来记录所有对关键数据表的DELETE操作,并设置告警机制。以下是在CentOS上使用Oracle数据库的详细举例:
启用审计
AUDIT DELETE ON hr.important_table;配置告警机制
创建一个触发器,当检测到DELETE操作时发送告警:
CREATE OR REPLACE TRIGGER alert_on_delete
AFTER DELETE ON hr.important_table
FOR EACH ROW
BEGIN
-- 假设存在一个程序包发送告警
pkg_alert.send_alert('DELETE operation detected on important_table');
END;查看审计日志
定期检查审计日志,确保没有未授权的DELETE操作:
SELECT * FROM DBA_AUDIT_TRAIL WHERE OBJECT_NAME='IMPORTANT_TABLE' AND ACTION_NAME='DELETE';设置自动化告警
配置一个脚本定期检查审计日志,并发送告警邮件:
#!/bin/bash
result=$(sqlplus -s / as sysdba <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT COUNT(*) FROM DBA_AUDIT_TRAIL WHERE OBJECT_NAME='IMPORTANT_TABLE' AND ACTION_NAME='DELETE';
EXIT;
EOF)
if [ "$result" -gt 0 ]; then
echo "Unauthorized DELETE operation detected on important_table" | mail -s "Database Alert" dba@example.com
fi
通过上述步骤,DBA可以有效地限制对数据和服务的访问、确保用户身份验证的安全性以及监控和响应可疑活动。
用户账户、角色和权限
监控用户账户的创建、删除、修改及角色和权限的分配是DBA的重要职责。以下是在CentOS上使用Oracle数据库的详细举例:
创建用户账户
CREATE USER user3 IDENTIFIED BY password;
GRANT CONNECT, RESOURCE TO user3;记录操作: AUDIT CREATE USER;删除用户账户
DROP USER user3 CASCADE;记录操作: AUDIT DROP USER;修改用户账户
ALTER USER user3 IDENTIFIED BY newpassword;记录操作: AUDIT ALTER USER;角色和权限的分配
GRANT SELECT ON hr.employees TO user3;记录操作: AUDIT GRANT ANY PRIVILEGE;
对象操作
记录对数据库对象(如表、视图、索引)的创建、修改和删除操作是确保数据库完整性的关键。以下是详细的例子:
创建表
CREATE TABLE hr.employees (
employee_id NUMBER,
first_name VARCHAR2(50),
last_name VARCHAR2(50)
);记录操作: AUDIT CREATE TABLE;修改表
ALTER TABLE hr.employees ADD (email VARCHAR2(100));记录操作: AUDIT ALTER TABLE;删除表
DROP TABLE hr.employees;记录操作: AUDIT DROP TABLE;
应用程序上下文值
审计应用程序运行时的上下文和参数变化,可以帮助识别潜在的安全问题。以下是在Oracle数据库中的实现:
创建应用程序上下文
CREATE CONTEXT user_ctx USING hr.set_user_ctx;设置上下文值
PROCEDURE set_user_ctx IS
BEGIN
DBMS_SESSION.set_context('user_ctx', 'user_id', '12345');
END;记录操作: AUDIT CONTEXT;
数据库导出和导入
记录使用Data Pump进行数据导出和导入的活动,确保数据传输的安全性和完整性。以下是详细步骤:
导出数据
expdp system/password@orcl schemas=hr directory=dp_dir dumpfile=hr_export.dmp logfile=hr_export.log;记录操作: AUDIT DIRECTORY;导入数据
impdp system/password@orcl schemas=hr directory=dp_dir dumpfile=hr_export.dmp logfile=hr_import.log;记录操作: AUDIT DIRECTORY;
Oracle数据库实际应用安全性
审计涉及Oracle数据库实际应用安全性的操作,确保应用安全策略的有效实施。以下是详细例子:
配置实际应用安全
BEGIN
DBMS_XS_ADMIN.create_user('app_user', 'password');
END;记录操作: AUDIT DBMS_XS_ADMIN;
Oracle Database Vault安全功能
记录涉及Oracle Database Vault安全功能的活动,确保数据库访问控制的严格性。以下是详细步骤:
创建安全策略
BEGIN
DBMS_MACADM.create_realm('Sensitive Data', 'Protect sensitive data', dbms_macutl.g_realm);
END;记录操作: AUDIT DBMS_MACADM;
Oracle 监控涉及标签安全策略
监控涉及标签安全策略的操作,确保数据访问的细粒度控制。以下是详细步骤:
配置标签安全
BEGIN
SA_LABEL_ADMIN.CREATE_LABEL('CONFIDENTIAL');
END;记录操作: AUDIT SA_LABEL_ADMIN;
Oracle 恢复管理器
记录使用恢复管理器进行备份和恢复的操作,确保数据恢复过程的安全性。以下是详细步骤:
备份数据库
rman target / <<EOF
BACKUP DATABASE PLUS ARCHIVELOG;
EOF记录操作: AUDIT RMAN;恢复数据库
rman target / <<EOF
RESTORE DATABASE;
RECOVER DATABASE;
EOF记录操作: AUDIT RMAN;
Oracle SQL*Loader直接路径事件
审计通过SQL*Loader进行的直接路径加载数据的活动,确保数据导入过程的安全性和准确性。以下是详细步骤:
使用SQL*Loader导入数据
sqlldr userid=user/password@orcl control=load.ctl log=load.log direct=true;记录操作: AUDIT SQL*Loader;
通过上述详细举例,DBA可以有效地监控和管理数据库中的用户账户、角色和权限、对象操作、应用程序上下文值、数据导出和导入、实际应用安全性、数据库金库安全功能、标签安全策略、恢复管理器以及直接路径加载数据的活动,确保数据库的安全性和完整性。
创建/修改/删除审计策略
记录审计策略的任何变动,如创建新策略、修改现有策略或删除策略。以下是在CentOS上使用Oracle数据库的详细举例:
创建审计策略
CREATE AUDIT POLICY select_emp_pol
ACTIONS SELECT ON hr.employees;记录操作: AUDIT CREATE AUDIT POLICY;修改审计策略
ALTER AUDIT POLICY select_emp_pol
ACTIONS DELETE ON hr.employees;记录操作: AUDIT ALTER AUDIT POLICY;删除审计策略
DROP AUDIT POLICY select_emp_pol;记录操作: AUDIT DROP AUDIT POLICY;
审计/取消审计
审计AUDIT和NOAUDIT命令的使用,确保这些命令的执行记录在案。以下是在Oracle数据库中的详细举例:
启用审计
AUDIT SELECT ON hr.employees;记录操作: AUDIT AUDIT;禁用审计
NOAUDIT SELECT ON hr.employees;记录操作: AUDIT NOAUDIT;
执行特定包的操作
包括DBMS_FGA和DBMS_AUDIT_MGMT的执行,以下是详细举例:
执行DBMS_FGA
BEGIN
DBMS_FGA.add_policy(
object_schema => 'HR',
object_name => 'EMPLOYEES',
policy_name => 'SALARY_AUDIT',
audit_column => 'SALARY'
);
END;记录操作: AUDIT EXECUTE ON DBMS_FGA;执行DBMS_AUDIT_MGMT
BEGIN
DBMS_AUDIT_MGMT.clean_audit_trail(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD,
use_last_arch_timestamp => TRUE
);
END;记录操作: AUDIT EXECUTE ON DBMS_AUDIT_MGMT;
修改AUDSYS审计表
记录对AUDSYS审计表的ALTER TABLE操作,确保对审计数据的修改被审计。以下是详细步骤:
修改AUDSYS审计表
ALTER TABLE AUDSYS.AUD$ ADD (user_ip VARCHAR2(15));记录操作: AUDIT ALTER TABLE ON AUDSYS.AUD$;
顶级管理员用户的语句
审计由SYS、SYSDBA、SYSOPER等高级用户在数据库打开之前执行的操作。以下是详细举例:
启用SYS用户操作审计
AUDIT SYSTEM BY ACCESS;记录操作: AUDIT AUDIT SYSTEM;审计SYSDBA用户的语句
AUDIT CONNECT BY SYSDBA;记录操作: AUDIT AUDIT CONNECT BY SYSDBA;数据库打开之前的操作
在启动数据库之前记录SYS用户执行的操作:
STARTUP MOUNT;
ALTER DATABASE OPEN;记录操作:
AUDIT SYSTEM BY ACCESS;
非常感谢您读到这里!如果您觉得这篇文章对您有帮助,可以关注一下博主。关注后,您将第一时间获得最新的AI、云计算、运维(Linux、数据库,容器等)技术,以及更多实用的技能干货。
让AI工具成为你的得力助手,感受AI工具的无限可能,让复杂的任务变得简单,让你的工作更加轻松和高效。




