暂无图片
OceanBase 数据库 Oracle 模式下的审计功能
最近更新:2024-01-29 11:27:08

适用范围

OceanBase V3 和 V4 版本。

使用限制

目前(OceanBase V4.2.2)仅 OceanBase 数据库的 Oracle 模式支持安全审计功能。

审计概述

  • 审计以租户为单位,租户 A 发起的审计只对租户 A 下用户的操作有效,其它租户无效。
  • 配置(AUDIT)和删除(NOAUDIT)审计规则的操作仅审计员 ORAAUDITOR 可以进行,符合三权分立的要求。
  • 审计内容、语法和 Oracle 标准审计基本一致。不支持统一审计。
  • 审计结果可以保存到磁盘文件中,也可以保存在数据库表中。
  • 支持 SQL 语句和数据对象的审计类型。
  • 审计结果如果保存到数据库表中,对于 OceanBase V3 版本则不支持删除审计数据,包括不支持truncate审计记录表。如果要开启审计功能,建议谨慎考虑审计记录的存储位置。对于 OceanBase V4.0 以及之后的版本可以使用DBMS_AUDIT_MGMT系统包来手动清理或创建定时清理的JOB。

审计流程

审计检查的时机位于一条用户 SQL 执行完毕后准备回包之前。审计检查的流程如下:

  1. 检查对当前用户是否进行审计,根据租户、用户名、系统参数综合判断。
  2. 解析 SQL 语句中可被审计的操作,一条 SQL 语句可以包含多个不同的操作,例如 insert into t1 select * from t2, t3 中包含了 (insert, t1)(select, t2)(select t3) 3 个操作。
  3. 对每个操作单独判断是否命中任意一条审计规则。
  4. 每个命中规则的操作单独产生一条审计记录。根据系统参数audit_trail,将审计记录写到内部表或系统文件中。

开启审计功能

OceanBase 数据库的审计相关操作(例如:配置(AUDIT)和删除(NOAUDIT)审计规则)一般由内置的 ORAAUDITOR 用户进行,该用户默认是锁定状态。

obclient [SYS]> select user_name, info, is_locked, gmt_create, password_last_changed from all_virtual_user_real_agent where type=0;
+------------+-----------------------------+-----------+------------------------------+------------------------------+
| USER_NAME  | INFO                        | IS_LOCKED | GMT_CREATE                   | PASSWORD_LAST_CHANGED        |
+------------+-----------------------------+-----------+------------------------------+------------------------------+
| SYS        | oracle system administrator |         0 | 26-NOV-23 11.07.39.784814 AM | 19-DEC-23 03.05.48.350343 PM |
| LBACSYS    | oracle system administrator |         1 | 26-NOV-23 11.07.39.987810 AM | 26-NOV-23 11.07.39.987810 AM |
| ORAAUDITOR | oracle system administrator |         1 | 26-NOV-23 11.07.39.997663 AM | 26-NOV-23 11.07.39.997663 AM |  --<<<<<<<<<<<
| DBMT       | NULL                        |         0 | 12-DEC-23 03.23.45.864549 PM | 19-DEC-23 02.44.35.092381 PM |
| TESTTEST   | NULL                        |         0 | 21-JAN-24 11.49.02.654048 PM | 21-JAN-24 11.49.02.646404 PM |
| TEST       | NULL                        |         0 | 22-JAN-24 12.32.15.428677 AM | 22-JAN-24 12.32.15.421363 AM |
| TEST2      | NULL                        |         0 | 22-JAN-24 09.52.19.185531 AM | 22-JAN-24 09.52.19.175422 AM |
| TEST3      | NULL                        |         0 | 22-JAN-24 03.17.10.062230 PM | 22-JAN-24 07.00.53.448512 PM |
+------------+-----------------------------+-----------+------------------------------+------------------------------+
8 rows in set (0.004 sec)

解锁 ORAAUDITOR 用户

  • 使用 sys 用户登录到 Oracle 租户解锁 ORAAUDITOR 用户。
alter user oraauditor account unlock;
  • 修改 ORAAUDITOR 用户的登录密码
alter user oraauditor identified by "AAaa11__";
  • ORAAUDITOR 用户默认不带任何权限,为了执行安全审计相关的操作,需要通过 GRANT 语句给 ORAAUDITOR 用户授予 CREATE SESSION 权限,允许ORAAUDITOR 用户登录数据库。如果允许 ORAAUDITOR 用户查看审计记录,需要授予 SELECT ANY DICTIONARY 权限。
# 如果没有授予 `CREATE SESSION` 权限,则登录数据库时会报以下错误
[root@ocp ~]# obclient -h192.168.10.36 -P2883 -uoraauditor@test#obdemo -p'AAaa11__'
ERROR 5361 (HY000): user ORAAUDITOR lacks CREATE SESSION privilege; logon denied
  • 使用 sys 用户授予 ORAAUDITOR 用户的CREATE SESSION权限和SELECT ANY DICTIONARY 权限。
obclient [SYS]> GRANT CREATE SESSION, SELECT ANY DICTIONARY TO ORAAUDITOR;
Query OK, 0 rows affected (0.007 sec)
  • 测试ORAAUDITOR 用户登录数据库
[root@ocp ~]# obclient -h192.168.10.36 -P2883 -uoraauditor@test#obdemo -p'AAaa11__'
Welcome to the OceanBase.  Commands end with ; or \g.
Your OceanBase connection id is 31244
Server version: OceanBase 3.2.4.5 (r105040022023111323-57088ca24eab4348125068a9ccf182d068a6a883) (Built Nov 13 2023 23:56:19)

Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

obclient [ORAAUDITOR]>

启用审计功能并设置审计记录的存储位置

通过租户级别的系统参数 audit_trail 开启审计功能并设置审计记录的存储位置,执行成功后立即生效。该参数的取值如下:

  • NONE:关闭审计,为默认值。
  • OS:审计记录写入本地磁盘文件。
  • DB:审计记录写入内部表。
  • DB,EXTENDED / DB_EXTENDED:审计记录写入内部表且记录包含执行的 SQL 语句。
obclient [SYS]> show parameters like 'audit_trail';
+-------+----------+---------------+----------+-------------+-----------+-------+-----------------------------------------------------------------------------------+----------+--------+---------+-------------------+
| ZONE  | SVR_TYPE | SVR_IP        | SVR_PORT | NAME        | DATA_TYPE | VALUE | INFO                                                                              | SECTION  | SCOPE  | SOURCE  | EDIT_LEVEL        |
+-------+----------+---------------+----------+-------------+-----------+-------+-----------------------------------------------------------------------------------+----------+--------+---------+-------------------+
| zone1 | observer | 192.168.10.36 |     2882 | audit_trail | NULL      | None  | enables or disables database auditing, support NONE;OS;DB;DB,EXTENDED;DB_EXTENDED | OBSERVER | TENANT | DEFAULT | DYNAMIC_EFFECTIVE |
| zone3 | observer | 192.168.10.38 |     2882 | audit_trail | NULL      | None  | enables or disables database auditing, support NONE;OS;DB;DB,EXTENDED;DB_EXTENDED | OBSERVER | TENANT | DEFAULT | DYNAMIC_EFFECTIVE |
| zone2 | observer | 192.168.10.37 |     2882 | audit_trail | NULL      | None  | enables or disables database auditing, support NONE;OS;DB;DB,EXTENDED;DB_EXTENDED | OBSERVER | TENANT | DEFAULT | DYNAMIC_EFFECTIVE |
+-------+----------+---------------+----------+-------------+-----------+-------+-----------------------------------------------------------------------------------+----------+--------+---------+-------------------+
3 rows in set (0.044 sec)

obclient [SYS]> ALTER SYSTEM SET audit_trail = 'DB';
Query OK, 0 rows affected (0.022 sec)

obclient [SYS]> show parameters like 'audit_trail';
+-------+----------+---------------+----------+-------------+-----------+-------+-----------------------------------------------------------------------------------+----------+--------+---------+-------------------+
......