【发布时间】:2016-11-02 07:46:06
【问题描述】:
我希望 MySQL 自动使用 AES 加密数据,这样我就不必在应用程序层这样做了。第一个问题:这甚至可能吗? 我尝试了这种简单的方法:
表:
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 值作为“值”。
是的,我知道我需要将随机密钥存储在某个地方。所以也许有人知道如何更新另一个表,因为“插入之前”?
非常感谢
错误信息:
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 Workbench 的生成代码:
START TRANSACTION;
USE `openeHealth`;
INSERT INTO `openeHealth`.`measurement` (`id`, `owner_id`, `type_id`, `value`, `device_id`) VALUES (1, 1, 1, ..., 1);
COMMIT;
【问题讨论】:
-
1) 如果您以这种方式加密数据,它将无法被搜索。你确定这是你想要的吗? 2) 请提供您在使用自己的代码时遇到的确切错误消息或意外行为。
-
是的,我不希望值是可搜索的,只是值的 id 应该是纯文本。我更新了问题。