我希望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