我正在为已经存在的数据库构建一个复制数据库(用于报告),我们想要混淆/散列某些列。两者都在AWS RDS平台上,复制设置为源的“只读副本”。
使用RDS复制的一个问题我发现你无法指定要忽略哪些列(假设RDS只读副本应该是1:1这并不奇怪,我完全明白我在做什么非常利基)
此问题的解决方案是在更新/插入上设置触发器以更改这些值,如下所示:
DELIMITER $$
CREATE TRIGGER clients_insert_obfuscate
BEFORE INSERT ON clients
FOR EACH ROW
BEGIN
SET NEW.access_token = NULL, NEW.user_token_ttl = 0;
END$$
DELIMITER ;
然而,我们想要改变的值之一是主键(此表上的PK用作优惠券代码兑换号码)。
这引出了我的问题 - 无论如何在从mysql内部执行之前更改更新中的where子句?那么在副本数据库上,而不是与未散列的代码匹配它与散列代码的匹配?
到目前为止,我有这个:
DELIMITER $$
CREATE TRIGGER insert_obfuscate
BEFORE INSERT ON codes
FOR EACH ROW
BEGIN
SET NEW.code = SHA2(NEW.code, 256);
END$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER update_obfuscate
BEFORE UPDATE ON codes
FOR EACH ROW
BEGIN
SET NEW.code = SHA2(NEW.code, 256);
END$$
DELIMITER ;
所以插入很好 - 但更新触发器只查看要更新的参数 - 而不是where子句。
我知道触发器可能不是正确的路线,但我很难找到其他任何东西。
无论如何这样做或者我是否需要考虑更改架构?我不想更改生产数据库上的模式。
由于