暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

深入理解数据库安全和审计实施方法

周同学带您玩AI 2024-07-30
211

1. 数据库安全和审计

数据库的整体安全性和审计工作包括:

  1. 配置和管理数据库安全策略

    • DBA需要配置数据库用户的权限和角色,以确保只有经过授权的用户才能访问和操作数据库。例如,在CentOS上的MySQL数据库中,DBA可以使用以下命令为用户授予SELECT权限:
      GRANT SELECT ON database_name.* TO 'username'@'host';

  2. 执行审计策略

    • DBA需要制定和实施审计策略,以监控和记录数据库活动。例如,使用Oracle数据库,DBA可以创建审计策略来记录所有对表的SELECT操作:
      AUDIT SELECT ON hr.employees;

  3. 监控数据库活动

    • DBA需要实时监控数据库活动,识别和响应异常操作。例如,可以配置告警系统,当检测到大量的登录失败尝试时,发送通知给DBA。
  4. 确保数据的机密性和完整性

    • 通过定期备份数据和实施数据加密措施,DBA确保数据在存储和传输过程中不被未授权访问或篡改。例如,在CentOS上的PostgreSQL中,启用数据加密可以使用如下配置:
      ssl = on
      ssl_cert_file = 'server.crt'
      ssl_key_file = 'server.key'

2. 启用统一审计

统一审计是一种整合多个审计功能的方法,简化了审计策略的管理。启用统一审计可以确保所有相关的审计活动集中管理。例如,在Oracle数据库中,启用统一审计的步骤如下:

  1. 确认数据库是否启用统一审计

    SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';

  2. 启用统一审计

    • 如果尚未启用,需要进行数据库实例的重启,并通过以下命令启用统一审计:
      sqlplus / as sysdba
      SHUTDOWN IMMEDIATE
      STARTUP UPGRADE
      ALTER SYSTEM SET AUDIT_TRAIL=DB,EXTENDED SCOPE=SPFILE;
      SHUTDOWN IMMEDIATE
      STARTUP

3. 创建统一的审计策略

通过创建统一的审计策略,可以对不同的数据库操作和活动进行集中审计。例如,在CentOS上的Oracle数据库中,可以创建一个策略来审计所有对关键表的SELECT操作:

  1. 创建审计策略

    CREATE AUDIT POLICY select_emp_pol
    ACTIONS SELECT ON hr.employees;

  2. 启用审计策略

    AUDIT POLICY select_emp_pol;

  3. 验证审计策略

    • 执行一些SELECT操作,然后检查审计日志:
      SELECT * FROM DBA_AUDIT_TRAIL WHERE OBJECT_NAME='EMPLOYEES';

4. 维护审计追踪

维护审计追踪意味着定期检查和管理审计日志,确保审计数据的完整性和可用性。DBA需要设置策略来保留、存档和清理审计日志。例如,在CentOS上的MySQL中,可以设置审计日志的轮替和存档策略:

  1. 配置审计日志

    [mysqld]
    audit-log=FORCE_PLUS_PERMANENT
    audit-log-file=/var/log/mysql/audit.log

  2. 设置日志轮替

    • 使用logrotate工具配置日志文件轮替和存档:
      /var/log/mysql/audit.log {
      daily
      rotate 7
      compress
      missingok
      notifempty
      create 640 mysql mysql
      postrotate
      usr/bin/mysqladmin flush-logs
      endscript
      }

  3. 清理旧日志

    • 定期检查并清理旧的审计日志文件,确保存储空间充足。

通过上述步骤,DBA可以有效地管理和维护数据库的安全性和审计功能,确保数据的机密性、完整性和可用性。

限制对数据和服务的访问

通过设置用户权限和角色,限制谁可以访问和操作哪些数据。例如,只有具有特定角色的用户才能对某些表进行UPDATE操作。以下是在CentOS上使用MySQL数据库的详细举例:

  1. 创建角色和用户

    CREATE ROLE update_role;
    CREATE USER 'user1'@'localhost' IDENTIFIED BY 'password';

  2. 授予角色权限

    GRANT UPDATE ON database_name.table_name TO update_role;

  3. 将角色分配给用户

    GRANT update_role TO 'user1'@'localhost';

  4. 验证权限

    • 使用user1
      登录并尝试更新table_name
      表的数据:

      UPDATE database_name.table_name SET column_name='value' WHERE condition;

    • 如果user1
      没有update_role
      ,尝试更新将会失败。

用户身份验证

通过验证用户身份来确保只有授权用户才能访问数据库。常见的方法包括密码验证、多因素认证等。以下是在CentOS上使用PostgreSQL的详细举例:

  1. 设置用户密码

    CREATE USER user2 WITH PASSWORD 'securepassword';

  2. 配置PostgreSQL进行密码验证

    • 编辑pg_hba.conf
      文件:

      # TYPE  DATABASE        USER            ADDRESS                 METHOD
      host all user2 192.168.1.0/24 md5

    • 重新加载配置:

      sudo systemctl reload postgresql

  3. 多因素认证

    • 安装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数据库的详细举例:

  1. 启用审计

    AUDIT DELETE ON hr.important_table;

  2. 配置告警机制

    • 创建一个触发器,当检测到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;

  3. 查看审计日志

    • 定期检查审计日志,确保没有未授权的DELETE操作:

      SELECT * FROM DBA_AUDIT_TRAIL WHERE OBJECT_NAME='IMPORTANT_TABLE' AND ACTION_NAME='DELETE';

  4. 设置自动化告警

    • 配置一个脚本定期检查审计日志,并发送告警邮件:

      #!/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数据库的详细举例:

  1. 创建用户账户

    CREATE USER user3 IDENTIFIED BY password;
    GRANT CONNECTRESOURCE TO user3;

    • 记录操作:
      AUDIT CREATE USER;

  2. 删除用户账户

    DROP USER user3 CASCADE;

    • 记录操作:
      AUDIT DROP USER;

  3. 修改用户账户

    ALTER USER user3 IDENTIFIED BY newpassword;

    • 记录操作:
      AUDIT ALTER USER;

  4. 角色和权限的分配

    GRANT SELECT ON hr.employees TO user3;

    • 记录操作:
      AUDIT GRANT ANY PRIVILEGE;

对象操作

记录对数据库对象(如表、视图、索引)的创建、修改和删除操作是确保数据库完整性的关键。以下是详细的例子:

  1. 创建表

    CREATE TABLE hr.employees (
      employee_id NUMBER,
      first_name VARCHAR2(50),
      last_name VARCHAR2(50)
    );

    • 记录操作:
      AUDIT CREATE TABLE;

  2. 修改表

    ALTER TABLE hr.employees ADD (email VARCHAR2(100));

    • 记录操作:
      AUDIT ALTER TABLE;

  3. 删除表

    DROP TABLE hr.employees;

    • 记录操作:
      AUDIT DROP TABLE;

应用程序上下文值

审计应用程序运行时的上下文和参数变化,可以帮助识别潜在的安全问题。以下是在Oracle数据库中的实现:

  1. 创建应用程序上下文

    CREATE CONTEXT user_ctx USING hr.set_user_ctx;

  2. 设置上下文值

    PROCEDURE set_user_ctx IS
    BEGIN
      DBMS_SESSION.set_context('user_ctx''user_id''12345');
    END;

    • 记录操作:
      AUDIT CONTEXT;

数据库导出和导入

记录使用Data Pump进行数据导出和导入的活动,确保数据传输的安全性和完整性。以下是详细步骤:

  1. 导出数据

    expdp system/password@orcl schemas=hr directory=dp_dir dumpfile=hr_export.dmp logfile=hr_export.log;

    • 记录操作:
      AUDIT DIRECTORY;

  2. 导入数据

    impdp system/password@orcl schemas=hr directory=dp_dir dumpfile=hr_export.dmp logfile=hr_import.log;

    • 记录操作:
      AUDIT DIRECTORY;

Oracle数据库实际应用安全性

审计涉及Oracle数据库实际应用安全性的操作,确保应用安全策略的有效实施。以下是详细例子:

  1. 配置实际应用安全

    BEGIN
      DBMS_XS_ADMIN.create_user('app_user''password');
    END;

    • 记录操作:
      AUDIT DBMS_XS_ADMIN;

Oracle Database Vault安全功能

记录涉及Oracle Database Vault安全功能的活动,确保数据库访问控制的严格性。以下是详细步骤:

  1. 创建安全策略

    BEGIN
      DBMS_MACADM.create_realm('Sensitive Data''Protect sensitive data', dbms_macutl.g_realm);
    END;

    • 记录操作:
      AUDIT DBMS_MACADM;

Oracle 监控涉及标签安全策略

监控涉及标签安全策略的操作,确保数据访问的细粒度控制。以下是详细步骤:

  1. 配置标签安全

    BEGIN
      SA_LABEL_ADMIN.CREATE_LABEL('CONFIDENTIAL');
    END;

    • 记录操作:
      AUDIT SA_LABEL_ADMIN;

Oracle 恢复管理器

记录使用恢复管理器进行备份和恢复的操作,确保数据恢复过程的安全性。以下是详细步骤:

  1. 备份数据库

    rman target / <<EOF
    BACKUP DATABASE PLUS ARCHIVELOG;
    EOF

    • 记录操作:
      AUDIT RMAN;

  2. 恢复数据库

    rman target / <<EOF
    RESTORE DATABASE;
    RECOVER DATABASE;
    EOF

    • 记录操作:
      AUDIT RMAN;

Oracle SQL*Loader直接路径事件

审计通过SQL*Loader进行的直接路径加载数据的活动,确保数据导入过程的安全性和准确性。以下是详细步骤:

  1. 使用SQL*Loader导入数据

    sqlldr userid=user/password@orcl control=load.ctl log=load.log direct=true;

    • 记录操作:
      AUDIT SQL*Loader;

通过上述详细举例,DBA可以有效地监控和管理数据库中的用户账户、角色和权限、对象操作、应用程序上下文值、数据导出和导入、实际应用安全性、数据库金库安全功能、标签安全策略、恢复管理器以及直接路径加载数据的活动,确保数据库的安全性和完整性。

创建/修改/删除审计策略

记录审计策略的任何变动,如创建新策略、修改现有策略或删除策略。以下是在CentOS上使用Oracle数据库的详细举例:

  1. 创建审计策略

    CREATE AUDIT POLICY select_emp_pol
    ACTIONS SELECT ON hr.employees;

    • 记录操作:
      AUDIT CREATE AUDIT POLICY;

  2. 修改审计策略

    ALTER AUDIT POLICY select_emp_pol
    ACTIONS DELETE ON hr.employees;

    • 记录操作:
      AUDIT ALTER AUDIT POLICY;

  3. 删除审计策略

    DROP AUDIT POLICY select_emp_pol;

    • 记录操作:
      AUDIT DROP AUDIT POLICY;

审计/取消审计

审计AUDIT和NOAUDIT命令的使用,确保这些命令的执行记录在案。以下是在Oracle数据库中的详细举例:

  1. 启用审计

    AUDIT SELECT ON hr.employees;

    • 记录操作:
      AUDIT AUDIT;

  2. 禁用审计

    NOAUDIT SELECT ON hr.employees;

    • 记录操作:
      AUDIT NOAUDIT;

执行特定包的操作

包括DBMS_FGA和DBMS_AUDIT_MGMT的执行,以下是详细举例:

  1. 执行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;

  2. 执行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操作,确保对审计数据的修改被审计。以下是详细步骤:

  1. 修改AUDSYS审计表

    ALTER TABLE AUDSYS.AUD$ ADD (user_ip VARCHAR2(15));

    • 记录操作:
      AUDIT ALTER TABLE ON AUDSYS.AUD$;

顶级管理员用户的语句

审计由SYS、SYSDBA、SYSOPER等高级用户在数据库打开之前执行的操作。以下是详细举例:

  1. 启用SYS用户操作审计

    AUDIT SYSTEM BY ACCESS;

    • 记录操作:
      AUDIT AUDIT SYSTEM;

  2. 审计SYSDBA用户的语句

    AUDIT CONNECT BY SYSDBA;

    • 记录操作:
      AUDIT AUDIT CONNECT BY SYSDBA;

  3. 数据库打开之前的操作

    • 在启动数据库之前记录SYS用户执行的操作:

      STARTUP MOUNT;
      ALTER DATABASE OPEN;

    • 记录操作:

      AUDIT SYSTEM BY ACCESS;

非常感谢您读到这里!如果您觉得这篇文章对您有帮助,可以关注一下博主。关注后,您将第一时间获得最新的AI、云计算、运维(Linux、数据库,容器等)技术,以及更多实用的技能干货。让AI工具成为你的得力助手,感受AI工具的无限可能,让复杂的任务变得简单,让你的工作更加轻松和高效。


文章转载自周同学带您玩AI,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论