gpt4 book ai didi

sql - MySQL 数据库审计跟踪触发器

转载 作者:行者123 更新时间:2023-11-29 07:13:52 25 4
gpt4 key购买 nike

我需要跟踪 MySql 数据库中某些表的更改(审计跟踪)。我正在尝试实现建议的解决方案 here .

我有一个包含以下列的 AuditLog 表:AuditLogID、TableName、RowPK、FieldName、OldValue、NewValue、TimeStamp。

mysql 存储过程如下(执行良好,并创建过程):

调用过程如:CALL addLogTrigger('ProductTypes', 'ProductTypeID');执行,但不创建任何触发器(参见图像)。 SHOW TRIGGERS 返回空集。

请让我知道可能是什么问题,或者实现此问题的替代方法。

    DROP PROCEDURE IF EXISTS addLogTrigger;
DELIMITER $
CREATE PROCEDURE addLogTrigger(IN tableName VARCHAR(255), IN pkField VARCHAR(255))
BEGIN

SELECT CONCAT(
'DELIMITER $\n', 'CREATE TRIGGER ', tableName, '_AU AFTER UPDATE ON ', tableName, ' FOR EACH ROW BEGIN ',
GROUP_CONCAT(
CONCAT(
'IF NOT( OLD.', column_name, ' <=> NEW.', column_name, ') THEN INSERT INTO AuditLog (',
'TableName, ',
'RowPK, ',
'FieldName, ',
'OldValue, ',
'NewValue'
') VALUES ( ''',
table_name, ''', NEW.',
pkField, ', ''',
column_name, ''', OLD.',
column_name, ', NEW.',
column_name,
'); END IF;'
)
SEPARATOR ' '
), ' END;$'
)
FROM
information_schema.columns
WHERE
table_schema = database()
AND table_name = tableName;

END$
DELIMITER ;

alt text http://pssnet.com/~devone/pssops3/testing/callprocedure.png

最佳答案

我想您会发现这个存储过程不会创建触发器;它创建 SQL 语句来创建触发器。将此过程的输出喷射到某个文件中,然后运行它。

查看输出,其中似乎有一些虚假的竖线字符,可能会造成麻烦;我的视力不尽如人意,所以我不能确定。

关于sql - MySQL 数据库审计跟踪触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2784563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com