博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

DBA1 第十章:实施oracle数据库安全性

Posted on 2011-09-07 21:32  little健健  阅读(714)  评论(0编辑  收藏  举报

责任划分

  • 必须信任具有 DBA 权限的用户。
    • 滥用信任
    • 审计线索会保护受信任的职位
  • 必须由多人分担 DBA 责任。
  • 一定不要共享帐户。
  • DBA 和系统管理员必须由不同人员担任。
  • 划分操作员与 DBA 的责任。

数据库安全性

  • 限制对数据和服务的访问(不是所有的用户都可以访问所有数据)
  • 验证用户
  • 监视可疑活动(运用审计工具)

最少权限原则

  • 包括
    • 只在计算机上安装所需软件
    • 只在计算机上激活所需服务:意味着打开的端口少
    • 只允许需要访问的用户访问操作系统 (OS) 和数据库:用户越少意味着口令和帐户越少。帐户越少,管理员就越容易跟踪帐户的最新活动。
    • 限制对 root 或管理员帐户的访问
    • 限制对 SYSDBA和 SYSOPER帐户的访问
    • 只允许用户访问完成工作所需的数据库对象
  • 应用
    • 保护数据字典
      • O7_dictionary_accessibilty=FALSE   确保 SYS 用户只能以 SYSDBA 身份登录
    • 从 PUBLIC 撤销不必要的权限
REVOKE EXECUTE ON UTL_SMTP, UTL_TCP, UTL_HTTP,
UTL_FILE FROM PUBLIC;
    • 限制对操作系统目录的访问:通过数据库中的DIRECTORY 对象,DBA 可将目录映射到操作系统路径,从而将对这些目录的权限授予给各个用户。
    • 限制具有管理权限的用户
      • 系统和对象的权限
      • 连接到数据库的 SYS 权限,如 SYSDBA和 SYSOPER
      • 其它 DBA 类型的权限,如DROP ANY TABLE
    • 限制远程数据库验证:默认情况下,EMOTE_OS_AUTHENT 参数设置为 FALSE。

审计

  • 监视可疑活动
    • 审计意味着捕获并存储关于系统中所发生情况的信息,这会增加系统需要执行的工作量。
    • 强制性审计:不管其它审计选项或参数为何,所有Oracle 数据库都会审计特定的操作。
    • 标准数据库审计:这是通过使用AUDIT_TRAIL 初始化参数在系统级别设置的。
    • 基于值审计:不仅会捕获已发生的审计事件,还会捕获插入、更新或删除的实际值。基于值审计是通过数据库触发器实施的。
    • 细粒度审计 (FGA):可捕获已发出的实际 SQL 语句,而不仅仅是发生了事件的 SQL 语句。
    • DBA 审计:在 DBA 与审计者或安全管理员之间划分审计责任,审计者或安全管理员在操作系统审计线索中负责监视 DBA 的活动。
  • 标准数据库审计
    • AUDIT_TRAIL 设置为 OS
      • Windows   审计记录存储在事件日志中
      • UNIX 或 Linux   AUDIT_FILE_DEST 参数指定的位置的文件中
    • AUDIT_TRAIL 参数设置为 DB
      • 可复查 DBA_AUDIT_TRAIL 视图中的审计记录,这个视图是SYS 方案的一部分。
    • AUDIT_TRAIL 设置为 XML 或 XML  EXTENDED
      • 审计记录会写入AUDIT_FILE_DEST 参数指向的目录中的XML 文件。使用 V$XML_AUDIT_TRAIL 视图可查看此目录中的所有XML 文件。
  • 启用审计
    • ALTER SYSTEM SET audit_trail=“XML” SCOPE=SPFILE;
  • 统一审计线索
    • 公共属性
      • 用全球标准时间 (UTC) 表示的全球时间戳。
      • 每个 Real Application Clusters (RAC) 实例的唯一实例编号。
      • 用于分组一个事务处理的审计记录的事务处理标识符。
    • 标准审计收集的额外信息
      • 系统更改号 (SCN),记录对系统的每一项更改。
      • 用户执行的确切 SQL 文本及与 SQL 文本一起使用的绑定变量。只有在初始化参数文件中指定了 AUDIT_TRAIL=DB 时,才会显示这些列。
    • 细粒度审计收集的额外信息
      • 每个审计记录的序列号
      • 将源自一条语句的多个审计条目联系起来的语句编号
  • Enterprise Manager 审计页
    • “Administration(管理)”  ----->  “Audit Settings(审计设置)”
    • Configuration(配置):
    • Audit Trails(审计线索):
    • Audited Privileges(审计权限)
    • Audited Objects(审计对象)
    • Audited Statements(审计语句)
  • 指定审计选项
    • 审计 SQL 语句
      • 审计影响表的任何DDL
        • AUDIT table;
      • 按用户名或者按成功或失败来设置重点审计的 SQL 语句
        • AUDIT TABLE BY hr WHENEVER NOT SUCCESSFUL;
    • 审计系统权限
      • 用来审计行使的任何系统权限
      • by access(默认):每次行使经过审计的系统权限时,都会生成一条审计记录
      • by session:每个会话只生成一条记录
      • AUDIT select any table BY hr BY SESSION;
    • 审计对象权限
      • 可用来审计对表、视图、过程、序列、目录和用户定义的数据类型执行的操作。
      • by access
      • by session(默认)
      • AUDIT UPDATE,DELETE on hr.employees BY ACCESS;
  • 基于值审计
CREATE OR REPLACE TRIGGER system.hrsalary_audit
AFTER
UPDATE OF salary
ON hr.employees
REFERENCING NEW
AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
IF :old.salary != :new.salary THEN
INSERT INTO system.audit_employees
VALUES (sys_context('userenv','os_user'), sysdate,
sys_context(
'userenv','ip_address'),
:new.employee_id
||
' salary changed from '||:old.salary||
' to '||:new.salary);
END IF;
END;
/
  • 细粒度审计(FGA)
    • 概览
      • 根据内容监视数据访问
      • 审计 SELECT、INSERT、UPDATE、DELETE和 MERGE
      • 可链接到表或视图,也可链接到一列或多列
      • 可能会触发一个过程
      • 使用 DBMS_FGA 程序包进行管理(DBMS_FGA.ALL_COLUMNS和 DBMS_FGA.ANY_COLUMNS,可根据语句中是使用了任一相关列还是全部相关列来进行审计)
    • FGA 策略
dbms_fga.add_policy (
object_schema
=> 'HR', --审计对象方案
object_name => 'EMPLOYEES', --审计对象名
policy_name => 'audit_emps_salary', --策略名
audit_condition => 'department_id=10', --审计条件
audit_column => 'SALARY', --审计列
handler_schema => 'secure', --PL/SQL 程序单元的方案
handler_module => 'log_emps_salary', --PL/SQL 程序单元的名称
enable => TRUE, --策略状态
statement_types => 'SELECT' ); --审计语句类型
    • 审计的 DML 语句
      • 如果满足 FGA 谓词并且引用了相关列,则会审计记录。
      • 不管指定列是什么,都会审计 DELETE 语句。因为 DELETE 语句会访问表中的所有列
      • 会审计 MERGE 语句以及基础 INSERT 或 UPDATE 生成语句。
    • FGA 准则
      • 要审计所有语句,请使用 null 条件
      • 策略名必须唯一
      • 创建策略时,审计的表或视图必须已经存在
      • 如果审计条件语法无效,则访问审计对象时会发生ORA-28112 错误。
      • 如果表中不存在审计的列,则不会审计任何行
      • 如果事件处理程序不存在,则不会返回任何错误但仍会创建审计记录。
  • DBA 审计
    • 审计线索必须存储在数据库外部
    • 总是审计以 SYSDBA 或 SYSOPER 身份进行的连接
    • 可使用 audit_sys_operations 启用对 SYSDBA或 SYSOPER 操作的附加审计。(默认设置为 FALSE)
    • 可使用 audit_file_dest 控制审计线索
      • Windows :审计线索存储在 Windows 事件日志中
      • UNIX 或Linux:审计记录存储在$ORACLE_HOME/rdbms/audit 中
  • 维护审计线索
    • 复查和存储旧记录
    • 避免出现存储问题
      • 标准审计的审计线索存储在 AUD$ 表中
      • FGA 的审计线索存储在FGA_LOG$ 表中
      • 默认情况下,这两个表都是在SYSTEM 表空间中创建的
    • 避免记录丢失(导入与导出)