【发布时间】:2012-02-13 18:48:50
【问题描述】:
我有一些带有加密字段的表。在查看 MySQL 文档后,我发现您无法创建自定义数据类型用于加密/解密,这将是理想的。因此,相反,我的观点类似于以下观点:
CREATE VIEW EMPLOYEE AS
SELECT ID, FIRST_NAME, LAST_NAME, SUPER_SECURE_DECRYPT(SSN) AS SSN
FROM EMPLOYEE_ENCRYPTED
再次,在阅读MySQL 文档后,我了解到视图不可插入,因为它具有派生列,并且 SSN 字段不可更新,因为它是派生列,这是有道理的。但是,您不能向视图添加触发器,因此写入视图并不是一个真正的选择。
为了解决这个问题,我创建了几个触发器,类似于:
CREATE TRIGGER EMPLOYEE_ENCRYPTED_UPDATE
BEFORE UPDATE ON EMPLOYEE_ENCRYPTED FOR EACH ROW
BEGIN
IF NEW.SSN <> OLD.SSN THEN
SET NEW.SSN = SUPER_SECURE_ENCRYPT(NEW.SSN);
END IF;
END;
还有一个用于插入的(因为它非常相似,所以我不会发布它)。这只是意味着我必须从视图中读取并写入表。
这是一个不错的解决方案除了,当您为查询加密列的更新语句提供where 子句时(例如,通过员工的 SSN 更新员工)。通常,这不是问题,因为我通常使用主键进行更新,但如果有办法做到这一点,我需要知道其他加密字段。
我想让MySQL 承担繁重的加密和解密工作,以便尽可能轻松地与开发人员合作。我希望应用程序开发人员在仍然使用加密字段的同时尽可能不必担心加密字段,这是这里的最终目标。感谢您提供任何帮助或建议。
【问题讨论】:
标签: mysql encryption triggers views