GBase 8a
运维管理
文章

GBase 8a集群审计日志使用介绍

发表于2025-01-04 16:22:3028次浏览1个评论

1.简介

GBase 8a MPP Cluster 的审计日志可根据审计策略配置进行数据库操作的记录和审计,同时也可以提供慢SQL的记录功能,方面用户进行 SQL 语句的分析优化。
审计日志记录的主要内容如下: 
   thread_id: 线程号,同 processlist 中的 ID; 
   taskid:每个 sql 任务编号; 
   start_time:开始执行时间; 
   end_time:结束执行时间; 
   user_host:登录的用户和 IP,显示格式为: priv_user[user]@hostname[IP]; 
   user:用户名; 
   host_ip: 用户登录端 IP 地址; 
   query_time:执行语句所用时间; 
   rows:行数; 
   db:执行语句所针对的数据库; 
   table_list: 涉及表,格式:`<db>`.`<tb>`[,...]; 
   sql_text:记录执行用时大于 long_query_time 设定值的 SQL 语句;
   sql_type:sql 类型,如 DDL、DML、DQL、OTHERS; 
   sql_command: sql 命令类型,如 SELECT、UPDATE,INSERT,LOAD 等; 
   operators: 涉及的算子,比如 JOIN、WHERE、GROUP、HAVING 等; 
   status:sql 执行状态,如 SUCCESS、FAILED、KILLED 等; 
   conn_type:用户登录方式(CAPI、ODBC、JDBC、ADO.NET、STUDIO); 
其中 sql_command 的取值范围为:INSERT、DELETE、UPDATE、LOAD、CREATE USER、CREATE DB、CREATE TABLE、CREATE VIEW、CREATE INDEX、CREATE PROCEDURE、CREATE FUNCTION、RENAME USER、ALTER DB、ALTER TABLE、ALTER PROCEDURE、ALTER FUNCTION、ALTER EVENT、DROP USER、DROP DB、DROP TABLE、DROP VIEW、DROP INDEX、DROP PROCEDURE、DROP FUNCTION、 
DROP EVENT、TRUNCATE、GRANT、REVOKE、SELECT 和 OTHERS。 
operators 的取值范围为:START_WITH、CONNECT_BY、JOIN、WHERE、 GROUP、OLAP_GROUP、HAVING、OLAP_FUNC、DISTINCT、ORDER 和 LIMIT。若一个 SQL 涉及多个算子,各算子之间用逗号分割。 

2.配置参数 
可以使用如下配置方式开启或关闭审计日志: 
全局级变量(默认为 0,即关闭审计日志) 
SET GLOBAL audit_log = 0; 
或 
SET GLOBAL audit_log = 1;
配置文件中设置(数据库服务重启仍有效)
在管理节点上/opt/gcluster/config/gbase_8a_gcluster.cnf配置文件中添加如下配置参数:
audit_log=1
log_output = 'table'
开启审计日志后,需要创建审计策略才能进行审计日志的记录。

3.创建审计策略 
创建审计策略的语法规则如下所示: 
CREATE AUDIT POLICY <audit_policy_name> [(<audit_policy_item> = 
<value>[,<audit_policy_item> = <value>])]; 
其中 audit_policy_name 为审计策略的名称,不区分大小写,存储时小写保存,可包括字母、数字和下划线,不能包含特殊符号,数字不能作为第一个字符;audit_policy_item 为审计策略项目,审计策略项目名称不区分大小写,目前支持的审计策略项目包括: 

项目名称取值&含义 
EnableY:启用,默认值
 N:禁用 
Hosts“”:不限制,默认值
 

<host>:严格匹配 host, 支持空格“ ”分隔的 host 

列表,host 可使用“%”和“_”做通配符

User “”:不限制,默认值
 <user>:严格匹配 user,区分大小写
Db“”:不限制,默认值
 <db>:严格匹配 db 
Obj_type“”:不限制,默认值
 TABLE(VIEW):Object 为表(视图) 
 PROCEDURE:Object 为存储过程 
 FUNCTION:Object 为函数
Object “”:不限制,默认值
 <object>:匹配 Obj_tpe 指定的 object 
Sql_commands“”:不限制,默认值
 

INSERT, DELETE, UPDATE, LOAD, CREATE_USER, 

CREATE_DB, CREATE_TABLE, CREATE_VIEW, 

CREATE_INDEX, CREATE_PROCEDURE, 

CREATE_FUNCTION, RENAME_USER, ALTER_DB, 

ALTER_TABLE, ALTER_PROCEDURE, ALTER_FUNCTION, 

ALTER_EVENT, DROP_USER, DROP_DB, DROP_TABLE, 

DROP_VIEW, DROP_INDEX, DROP_PROCEDURE, 

DROP_FUNCTION, DROP_EVENT, TRUNCATE, 

GRANT, REVOKE, SELECT, OTHERS: 

其中的一种或多种类型,多个类型间以逗号‘

,’连接, 

且不添加空格

Long_query_time 

 

<secs>:最小查询秒数,可带 6 位小数,精确到微秒, 

默认值 0,取值范围为 0~31536000

Status“”:不限制,默认值 
 SUCCESS:执行成功
 FAILED:执行失败 

4.修改审计策略 
修改审计策略的语法规则如下: 
ALTER AUDIT POLICY <audit_policy_name> SET [(]<audit_policy_item> = <value>[,<audit_policy_item> = <value>][)]; 
其中: 
audit_policy_name 为审计策略的名称,不区分大小写;
audit_policy_item 为审计策略项目,取值内容与创建审计策略中描述相同

5.删除审计策略 
删除审计策略语法规则如下: 
DROP AUDIT POLICY <audit_policy_name>; 
6.使用示例 
示例 1:使用系统表查看审计日志。

gbase> SET long_query_time = 0; 
Query OK, 0 rows affected 
gbase> SET GLOBAL audit_log = 1;
Query OK, 0 rows affected 
gbase>CREATE AUDIT POLICY audit_policy_1 ( Enable = 'Y' ); 
Query OK, 0 rows affected 
gbase> SET GLOBAL log_output = 'table'; 
Query OK, 0 rows affected 
gbase> CREATE USER u_sj identified by 'u_sj'; 
Query OK, 0 rows affected 
gbase> GRANT ALL ON *.* TO u_sj; 
Query OK, 0 rows affected 
gbase> CREATE DATABASE testSJ; 
Query OK, 1 row affected 
gbase> USE testSJ; 
Query OK, 0 rows affected 
gbase> CREATE TABLE t1(i int); 
Query OK, 0 rows affected 
gbase> INSERT INTO t1 VALUES (1),(2); 
Query OK, 2 rows affected 
gbase> SELECT start_time,user_host,query_time,rows,LEFT(sql_text, 30), conn_type FROM 
gbase.audit_log; 
+---------------------+----------------------------------+ 
| start_time | user_host | 
+---------------------+----------------------------------+ 
| 2021-06-16 10:40:24 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:40:24 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:40:24 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:40:24 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:40:24 | root[root] @ localhost [] | 
| 2021-06-16 10:40:33 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:40:33 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:40:33 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:40:32 | root[root] @ localhost [] | 
| 2021-06-16 10:40:44 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:40:44 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:40:44 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:40:44 | root[root] @ localhost [] | 
| 2021-06-16 10:40:48 | gbase[gbase] @ [192.168.146.24] | 
| 2021-06-16 10:40:49 | gbase[gbase] @ [192.168.146.24] | 
| 2021-06-16 10:40:49 | gbase[gbase] @ [192.168.146.24] | 
| 2021-06-16 10:40:57 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:40:57 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:40:57 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:40:57 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:40:57 | root[root] @ localhost [] | 
| 2021-06-16 10:41:05 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:41:05 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:41:05 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:41:05 | root[root] @ localhost [] | 
| 2021-06-16 10:41:17 | gbase[gbase] @ [192.168.146.24] | 
| 2021-06-16 10:41:17 | gbase[gbase] @ [192.168.146.24] | 
| 2021-06-16 10:41:17 | gbase[gbase] @ [192.168.146.24] | 
| 2021-06-16 10:41:17 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:41:17 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:41:17 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:41:17 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:41:17 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:41:17 | root[root] @ localhost [] | 
| 2021-06-16 10:41:29 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:41:29 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:41:29 | root[root] @ [192.168.146.24] | 
| 2021-06-16 10:41:29 | root[root] @ localhost [] | 
| 2021-06-16 10:41:43 | root[root] @ localhost [] | 
+---------------------+----------------------------------+ 
+-----------------+------+--------------------------------+-----------+ 
| query_time | rows | LEFT(sql_text, 30) | conn_type |
+-----------------+------+--------------------------------+-----------+ 
| 00:00:00.000012 | 0 | Ping | CAPI | 
| 00:00:00.000115 | 0 | SET NAMES utf8mb4 | CAPI | 
| 00:00:00.000164 | 0 | SET SELF SCN = 0 | CAPI | 
| 00:00:00.000094 | 0 | SET SELF GLOBAL log_output = | CAPI | 
| 00:00:00.239863 | 0 | SET GLOBAL log_output = 'table | ODBC | 
| 00:00:00.000009 | 0 | Ping | CAPI | 
| 00:00:00.000143 | 0 | SET SELF SCN = 0 | CAPI | 
| 00:00:01.149579 | 0 | CREATE GCLUSTER_LOCAL USER "u_ | CAPI | 
| 00:00:04.376179 | 0 | CREATE USER u_sj identified by | ODBC | 
| 00:00:00.000019 | 0 | Ping | CAPI | 
| 00:00:00.000207 | 0 | SET SELF SCN = 0 | CAPI | 
| 00:00:00.057846 | 0 | GRANT /*+vcid*/ GCLUSTER_LOCAL | CAPI | 
| 00:00:00.266514 | 0 | GRANT ALL ON *.* TO u_sj | ODBC | 
| 00:00:00.001372 | 0 | Connect | CAPI | 
| 00:00:00.000005 | 0 | Ping | CAPI | 
| 00:00:00.000002 | 0 | Quit | CAPI | 
| 00:00:00.000008 | 0 | Ping | CAPI | 
| 00:00:00.000090 | 0 | SET NAMES utf8 | CAPI | 
| 00:00:00.000147 | 0 | SET SELF SCN = 9259 | CAPI | 
| 00:00:00.261615 | 0 | CREATE GCLUSTER_LOCAL DATABASE | CAPI | 
| 00:00:00.965256 | 0 | CREATE DATABASE testSJ | ODBC | 
| 00:00:00.000018 | 0 | Ping | CAPI | 
| 00:00:00.000042 | 0 | Init VC Name | CAPI | 
| 00:00:00.000058 | 0 | Init DB | CAPI | 
| 00:00:00.014822 | 0 | USE testSJ | ODBC | 
| 00:00:00.004341 | 0 | Connect | CAPI | 
| 00:00:00.032791 | 0 | select table_id from informati | CAPI | 
| 00:00:00.000003 | 0 | Quit | CAPI | 
| 00:00:00.000038 | 0 | Ping | CAPI | 
| 00:00:00.000046 | 0 | Init VC Name | CAPI | 
| 00:00:00.000070 | 0 | Init DB | CAPI | 
| 00:00:00.000547 | 0 | SET SELF SCN = 9260 | CAPI | 
| 00:00:00.781898 | 0 | CREATE GCLUSTER_LOCAL TABLE | CAPI | 
| 00:00:02.731924 | 0 | CREATE TABLE t1(i int) | ODBC | 
| 00:00:00.000132 | 0 | commit | CAPI | 
| 00:00:00.000614 | 0 | set autocommit=1 | CAPI |
| 00:00:00.000175 | 0 | set autocommit=1 | CAPI | 
| 00:00:00.200714 | 2 | INSERT INTO t1 VALUES (1),(2) | ODBC | 
| 00:00:00.000530 | 38 | SELECT start_time,user_host,qu | ODBC | 
+-----------------+------+--------------------------------+-----------+ 
39 rows in set (Elapsed: 00:00:00.00) 
gbase> INSERT INTO t1 SELECT * FROM t1; 
Query OK, 2 rows affected 
gbase> UPDATE t1 SET i = 3; 
Query OK, 4 rows affected 
gbase> DELETE FROM t1; 
Query OK, 4 rows affected 
gbase> SELECT start_time,user_host,query_time,rows, LEFT(sql_text, 30), conn_type 
FROM gbase.audit_log;
+---------------------+--------------------------------+ 
| start_time | user_host | 
+---------------------+--------------------------------+ 
| 2021-06-16 11:17:18 | root[root] @ localhost [] | 
| 2021-06-16 11:18:09 | root[root] @ localhost [] | 
| 2021-06-16 11:18:21 | root[root] @ [192.168.146.24] | 
| 2021-06-16 11:18:21 | root[root] @ [192.168.146.24] | 
| 2021-06-16 11:18:21 | root[root] @ [192.168.146.24] | 
| 2021-06-16 11:18:20 | root[root] @ localhost [] | 
| 2021-06-16 11:18:29 | root[root] @ [192.168.146.24] | 
| 2021-06-16 11:18:29 | root[root] @ [192.168.146.24] | 
| 2021-06-16 11:18:29 | root[root] @ [192.168.146.24] | 
| 2021-06-16 11:18:28 | root[root] @ localhost [] | 
+---------------------+--------------------------------+ 
+-----------------+------+--------------------------------+-----------+ 
| query_time | rows | LEFT(sql_text, 30) | conn_type | 
+-----------------+------+--------------------------------+-----------+ 
| 00:00:00.003119 | 0 | truncate self table gbase.audi | ODBC | 
| 00:00:02.090188 | 2 | INSERT INTO t1 SELECT * FROM t | ODBC |
| 00:00:00.000095 | 0 | commit | CAPI | 
| 00:00:00.000272 | 0 | set autocommit=1 | CAPI | 
| 00:00:00.000416 | 0 | set autocommit=1 | CAPI | 
| 00:00:01.108768 | 4 | UPDATE t1 SET i = 3 | ODBC | 
| 00:00:00.000057 | 0 | commit | CAPI | 
| 00:00:00.000198 | 0 | set autocommit=1 | CAPI | 
| 00:00:00.000899 | 0 | set autocommit=1 | CAPI | 
| 00:00:00.396723 | 4 | DELETE FROM t1 | ODBC | 
+-----------------+------+--------------------------------+-----------+ 
10 rows in set (Elapsed: 00:00:00.00)

7.审计日志高可用 
为实现审计日志的高可用机制,集群安装或升级时自动在 gclusterdb 库下创建 EXPRESS 引擎随机分布表 audit_log_express,并自动创建定时导出事件,将 gbase 库中的 audit_log 表内容定时导出到 gclusterdb 库中的audit_log_express 表。

评论

登录后才可以发表评论
菲菲发表于 2个月前
学习了