这就是我想搞清楚的情况。
我有一个名为users的表,它包含以下列,
id
user_name
email --encrypted
phone --encrypted
password --encrypted
created_at
updated_at
我想要实现的是,假设我运行DQL命令SELECT,它应该自动解密这些列中的数据,如下所示
SELECT email FROM users; // this should give the decrypted email value
SELECT * FROM users; // this should give the decrypted email, phone and password value
我想要实现的是,假设我运行了DML命令insert,update,它会自动加密数据,然后在如下列中插入或更新
INSERT INTO users (user_name,email,phone,password) VALUES ('test','test@test.com','1234123412','password'); // this should encrypt email, password, phone before inserting automatically.
我只能从服务器端脚本执行此操作,但问题是应用程序已经创建,更改列名的整个代码将是一项非常耗时的任务。
任何帮助都很感激。
2条答案
按热度按时间wyyhbhjk1#
你最好的选择是eloquent mutators/accessors Laravel和默认的Laravel加密/解密助手。将自动加密时保存和返回您的列未加密。下面的代码为电子邮件字段例如将自动加密和解密电子邮件列。最大的缺点是你不能搜索任何加密列。希望这对你有帮助
w41d8nur2#
MySQL 5.7和更高版本支持一些加密表空间的选项。下面是一篇介绍这些选项的好文章:https://dev.mysql.com/blog-archive/controlling-table-encryption-in-mysql-8-0/
但是没有自动的方法来加密和解密单个列,最接近的方法是需要编写触发器在INSERT & UPDATE时加密,并编写VIEW在读取数据时解密。
除此之外,您还需要着手重构客户机代码(我就是这么做的)。