SQL 审计日志

SQL 审计日志记录了执行的查询的详细信息。记录针对包含个人标识信息的表运行的所有查询时,该特性特别有用。 提供了一个在 hubble中的 SQL 审计日志的示例,包括:

  • 如何打开和关闭审计日志。
  • 审计日志文件所在的位置。
  • 审计日志文件是什么样子。

参数说明

ALTER TABLE ... EXPERIMENTAL_AUDIT SET ...

范围描述
table_name您要为其创建审核日志的表的名称。
READ将所有表读取记录到审核日志文件中。
WRITE将所有表写入记录到审计日志文件。
OFF关闭审计日志。

操作步骤

步骤一:创建示例表

使用下面的语句来创建:

  • 创建users 表。
  • 展示如何打开 users 表的审计日志。
create table  users (
    id uuid  primary key default gen_random_uuid(),
    name string not null,
    password string not null,
    address string not null,
    telephone int not null,
    email string unique not null
);

步骤二:打开 users 表的审计

我们使用ALTER TABLEEXPERIMENTAL_AUDIT 子命令打开对表的审计。

alter table users  experimental_audit set read  write;

步骤三:找到审计日志文件用滚动日志方式打开此文件

默认情况下,活动审计日志文件的前缀是 hubble-sql-audit,并存储在 hubble数据库的标准日志目录中。要将审计日志文件存储在特定的目录中,请将 ——sql-audit-dir 标志传递给hubble start。与其他日志文件一样,它根据 ——log-file-max-size 设置进行调整。 当我们查看这个示例的审计日志时,我们会正如预期的那样看到下面的行,显示了到目前为止我们所运行的每个命令。

  • 根据hubble启动的service,查找 --log-config-file=log.yaml中的这个文件 log.yaml 具体位置
  • 再根据这个log.yaml文件查看审计日志文件路径

例如:

[root@poc-hubble01 ~]# more /var/lib/hubbletp310/log.yaml
# configuration after validation:

file-defaults:
  # 日志的路径
  dir: /data/hubbledir310/logs

  max-file-size: 10MiB

  max-group-size: 100MiB

  buffered-writes: true

  filter: INFO

  format: hubdb-v2

  redact: false  

  redactable: true

  exit-on-error: true

滚动审计日志

[root@poc-hubble01 logs]# pwd
/data/hubbledir310/logs
[root@poc-hubble01 logs]# tail -f hubble310-sql-audit.log

步骤四:给users 表 添加测试数据

先打开审计日志文件 查看是否有滚动日志,再执行插入以及查询语句

insert into users (name, password, address, telephone, email) values (
    'scottwolf',
    'scottwolf',
    '北京海淀',
    18210301210,
    '16666666666@qq.com'
),(
    'scott',
    'scott',
    '北京朝阳',
    18210301200,
    '177777777@qq.com'
);

验证是否已成功添加数据:

root@poc-hubble01:35432/defaultdb> select * from users;
                   id                  |   name    | password  | address  |  telephone  |       email
---------------------------------------+-----------+-----------+----------+-------------+---------------------
  5b3dba74-8894-4964-a418-83479d3aca41 | scottwolf | scottwolf | 北京海淀 | 18210301210 | 16666666666@qq.com
  ce24b852-1a33-4b2a-9377-9b6b9cc1a20a | scott     | scott     | 北京朝阳 | 18210301200 | 177777777@qq.com
(2 rows)

Time: 4ms total (execution 3ms / network 0ms)

步骤五:验证审计日志开启

通过查看审计日志是否有滚动

I220616 05:52:04.516870 1228462113 8@util/log/event_log.go:32[n1,client=192.168.1.11:19420,hostssl,user=root] 25 ={"Timestamp":1655358724514188553,"EventType":"sensitive_table_access","Statement":"‹INSERT INTO \"\".\"\".users(name, password, address, telephone, email) VALUES ('scottwolf', 'scottwolf', e'\\U00005317\\U00004EAC\\U00006D77\\U00006DC0', 18210301210, '16666666666@qq.com'), ('scott', 'scott', e'\\U00005317\\U00004EAC\\U0000671D\\U00009633', 18210301200, '177777777@qq.com')›","Tag":"INSERT","User":"root","DescriptorID":7842,"ApplicationName":"$ hubble sql","ExecMode":"exec","NumRows":2,"Age":1.920044,"TxnCounter":59,"AccessMode":"rw"}
I220616 05:52:29.741715 1228462113 8@util/log/event_log.go:32[n1,client=192.168.1.11:19420,hostssl,user=root] 26 ={"Timestamp":1655358749739046887,"EventType":"sensitive_table_access","Statement":"‹SELECT * FROM \"\".\"\".users›","Tag":"SELECT","User":"root","DescriptorID":7842,"ApplicationName":"$ hubble sql","ExecMode":"exec","NumRows":2,"Age":1.679085,"FullTableScan":true,"TxnCounter":61,"TableName":"‹defaultdb.public.users›","AccessMode":"r"}

操作sql语句写入到审计日志中

步骤六:关闭审计日志

关闭审计日志语句:

root@poc-hubble01:35432/defaultdb> alter table  users experimental_audit set  off;
ALTER TABLE

Time: 55ms total (execution 54ms / network 0ms)

设置完关闭审计日志,先打开审计日志文件,再执行对users表查询,验证是否滚动日志

查询对应表,查看审计日志文件是否有日志输出

[root@poc-hubble01 logs]# pwd
/data/hubbledir310/logs
[root@poc-hubble01 logs]# tail -f hubble310-sql-audit.log
root@poc-hubble01:35432/defaultdb> select count(1) from users;
  count
---------
      2
(1 row)

Time: 3ms total (execution 2ms / network 0ms)

操作查询语句,审计日志文件没有滚动日志。 结论:users表审计日志关闭