修复审计中删除触发器记录object_name的乱码问题

This commit is contained in:
luozihao
2023-05-09 21:08:28 +08:00
parent 14fd3c8bf9
commit 8e5ab275fc
3 changed files with 60 additions and 1 deletions

View File

@ -1157,7 +1157,7 @@ static void pgaudit_process_drop_objects(Node* node, const char* querystring)
pgaudit_ddl_schema(objectname, querystring); pgaudit_ddl_schema(objectname, querystring);
} break; } break;
case OBJECT_TRIGGER: { case OBJECT_TRIGGER: {
objectname = strVal(lfirst(list_tail(names))); objectname = strVal(lfirst(list_tail((List*)lfirst(list_tail(names)))));
pgaudit_ddl_trigger(objectname, querystring); pgaudit_ddl_trigger(objectname, querystring);
} break; } break;
case OBJECT_FUNCTION: { case OBJECT_FUNCTION: {

View File

@ -32,12 +32,39 @@ SELECT detail_info FROM pg_query_audit('2021-12-17 9:30:00', '2031-12-12 22:00:0
-- DQL -- DQL
\! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_dml_state_select=1" > /dev/null 2>&1 \! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_dml_state_select=1" > /dev/null 2>&1
\! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_system_object=127" > /dev/null 2>&1
select pg_sleep(1); select pg_sleep(1);
show audit_dml_state_select; show audit_dml_state_select;
create table t3(id int); create table t3(id int);
select * from t3; select * from t3;
SELECT detail_info FROM pg_query_audit('2021-12-17 9:30:00', '2031-12-12 22:00:00') where type='dml_action_select' and object_name='t3'; SELECT detail_info FROM pg_query_audit('2021-12-17 9:30:00', '2031-12-12 22:00:00') where type='dml_action_select' and object_name='t3';
-- trigger test
CREATE TABLE test_trigger_src_tbl(id1 INT, id2 INT,id3 INT);
CREATE TABLE test_trigger_des_tbl(id1 INT, id2 INT, id3 INT);
CREATE OR REPLACE FUNCTION tri_insert_func() RETURNS TRIGGER AS
$$
DECLARE
BEGIN
INSERT INTO test_trigger_des_tbl VALUES(NEW.id1, NEW.id2,
NEW.id3);
RETURN NEW;
END
$$ LANGUAGE PLPGSQL;
CREATE TRIGGER insert_trigger
BEFORE INSERT ON test_trigger_src_tbl
FOR EACH ROW
EXECUTE PROCEDURE tri_insert_func();
ALTER TRIGGER insert_trigger ON test_trigger_src_tbl RENAME TO
insert_trigger_renamed;
DROP TRIGGER insert_trigger_renamed ON test_trigger_src_tbl;
DROP FUNCTION tri_insert_func();
DROP TABLE test_trigger_src_tbl;
DROP TABLE test_trigger_des_tbl;
SELECT object_name FROM pg_query_audit('2021-12-17 9:30:00', '2031-12-12 22:00:00') where object_name like '%insert_trigger%';
\! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_system_object" > /dev/null 2>&1
-- 关闭xid开关 -- 关闭xid开关
\! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_xid_info=0" > /dev/null 2>&1 \! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_xid_info=0" > /dev/null 2>&1
\! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_dml_state=0" > /dev/null 2>&1 \! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_dml_state=0" > /dev/null 2>&1

View File

@ -76,6 +76,7 @@ SELECT detail_info FROM pg_query_audit('2021-12-17 9:30:00', '2031-12-12 22:00:0
-- DQL -- DQL
\! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_dml_state_select=1" > /dev/null 2>&1 \! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_dml_state_select=1" > /dev/null 2>&1
\! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_system_object=127" > /dev/null 2>&1
select pg_sleep(1); select pg_sleep(1);
pg_sleep pg_sleep
---------- ----------
@ -100,6 +101,37 @@ SELECT detail_info FROM pg_query_audit('2021-12-17 9:30:00', '2031-12-12 22:00:0
xid=XIDNUM, select * from t3; xid=XIDNUM, select * from t3;
(1 row) (1 row)
-- trigger test
CREATE TABLE test_trigger_src_tbl(id1 INT, id2 INT,id3 INT);
CREATE TABLE test_trigger_des_tbl(id1 INT, id2 INT, id3 INT);
CREATE OR REPLACE FUNCTION tri_insert_func() RETURNS TRIGGER AS
$$
DECLARE
BEGIN
INSERT INTO test_trigger_des_tbl VALUES(NEW.id1, NEW.id2,
NEW.id3);
RETURN NEW;
END
$$ LANGUAGE PLPGSQL;
CREATE TRIGGER insert_trigger
BEFORE INSERT ON test_trigger_src_tbl
FOR EACH ROW
EXECUTE PROCEDURE tri_insert_func();
ALTER TRIGGER insert_trigger ON test_trigger_src_tbl RENAME TO
insert_trigger_renamed;
DROP TRIGGER insert_trigger_renamed ON test_trigger_src_tbl;
DROP FUNCTION tri_insert_func();
DROP TABLE test_trigger_src_tbl;
DROP TABLE test_trigger_des_tbl;
SELECT object_name FROM pg_query_audit('2021-12-17 9:30:00', '2031-12-12 22:00:00') where object_name like '%insert_trigger%';
object_name
------------------------
insert_trigger
insert_trigger
insert_trigger_renamed
(3 rows)
\! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_system_object" > /dev/null 2>&1
-- 关闭xid开关 -- 关闭xid开关
\! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_xid_info=0" > /dev/null 2>&1 \! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_xid_info=0" > /dev/null 2>&1
\! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_dml_state=0" > /dev/null 2>&1 \! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_dml_state=0" > /dev/null 2>&1