我正在尝试在Azure单一服务器中启用pgaudit。我遵循了Microsoft提供的说明和Postgres的文档。
这些是我的设置(下图中选择的2是DDL和角色)

测井参数

然后,我使用一个存储帐户为这些文件配置了一个目的地。到目前一切尚好。我运行了这个测试用例
postgres=> create table test_audit ( c1 integer ) ;
CREATE TABLE
postgres=> \dt test_audit
List of relations
Schema | Name | Type | Owner
--------+------------+-------+------------
public | test_audit | table | posadmn001
(1 row)
postgres=> insert into test_audit values ( 1 ) ;
INSERT 0 1
postgres=> insert into test_audit values ( 2 ) ;
INSERT 0 1
postgres=> alter table test_audit add c2 integer ;
ALTER TABLE
postgres=> drop table test_audit ;
DROP TABLE因此,我应该只期望DDL操作的条目,而不是DML的条目,这是很好的工作。
创建表
"message": "*AUDIT: SESSION,1,1,DDL,CREATE TABLE,TABLE,public.test_audit,create table test_audit ( c1 integer ) ;,<none>","detail": "","errorLevel": "LOG","domain": "postgres-11","schemaName": "","tableName": "","columnName": "","datatypeName"修改表
"message": "AUDIT: SESSION,2,1,DDL,ALTER TABLE,TABLE,public.test_audit,alter table test_audit add c2 integer ;,<none>","detail": "","errorLevel": "LOG","domain": "postgres-11","schemaName": "","tableName": "","columnName": "","datatypeName"液滴表
"message": "AUDIT: SESSION,1,1,DDL,DROP TABLE,TABLE,public.test_audit,drop table test_audit ;,<none>","detail": "","errorLevel": "LOG","domain": "postgres-11","schemaName": "","tableName": "","columnName": "","datatypeName"然而,审计跟踪并没有显示谁执行过这样的操作。我的意思是,如果逐行查看日志,显然管理员用户会为连接本身输入一个条目,但与审计本身无关。是否有任何方法可以在审计跟踪和DDL操作中收集用户?因此,当我查找带有单词AUDIT的消息时,我可以得到命令和执行命令的用户。
谢谢你的帮助
发布于 2022-11-24 20:49:12
您可以通过向%u添加log_line_prefix来获取日志行前缀中的用户名。一个有用的设置可能是
log_line_prefix = '%m [%p] %q%u@%d (%h) 'https://stackoverflow.com/questions/74557122
复制相似问题