我希望MySQL使用AES自动加密数据,以便我不必在应用程序层中执行此操作。第一个问题:这甚至可能吗? 我想,简单的方法:在插入之前触发MySQL时的更改类型
表:
measurement
id INT
value VARBINARY(50)
触发:
CREATE DEFINER = CURRENT_USER TRIGGER `openeHealth`.`measurement_BEFORE_INSERT` BEFORE INSERT ON `measurement` FOR EACH ROW
BEGIN
SET @@session.block_encryption_mode = 'aes-256-ecb';
DECLARE vKey = RANDOM_BYTES(256);
SET NEW.value HEX(AES_ENCRYPT(value, vKey));
END
这是我第一次尝试使用触发器,所以也许这是一个简单的故障或者也许MySQL不支持的东西喜欢这个。
我的testinsert有一个Double值作为'value'。
是的,我知道我需要将我的随机密钥存储在某个地方。所以也许有人有一个想法如何更新另一个表“应该在之前插入”?
非常感谢
错误消息:
ERROR: Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.., 1)' at line 1
SQL Code:
INSERT INTO `openeHealth`.`measurement` (`id`, `owner_id`, `type_id`, `value`, `device_id`) VALUES (1, 1, 1, ..., 1)
生成MySQL工作台的代码:
START TRANSACTION;
USE `openeHealth`;
INSERT INTO `openeHealth`.`measurement` (`id`, `owner_id`, `type_id`, `value`, `device_id`) VALUES (1, 1, 1, ..., 1);
COMMIT;
1)如果这种方式对数据进行加密,它是不会被搜索。你确定这是你想要的吗? 2)请提供您在使用自己的代码时遇到的确切错误消息或意外行为。 – Shadow
是的,我不希望该值可以被搜索,只是值的标识应该是纯文本的。我更新了这个问题。 – Timo