通过触发器或类似的

时间:2017-09-19 16:14:05

标签: mysql

我正在为已经存在的数据库构建一个复制数据库(用于报告),我们想要混淆/散列某些列。两者都在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子句。

我知道触发器可能不是正确的路线,但我很难找到其他任何东西。

无论如何这样做或者我是否需要考虑更改架构?我不想更改生产数据库上的模式。

由于

0 个答案:

没有答案