原创 编程悟道 编程悟道 2024-01-20 11:00 发表于江苏

第24讲 -3 MySQL安全优化:数据脱敏和加密

欢迎回到MySQL安全优化的小课堂,今天我们的主题是数据脱敏和加密——这个话题就像是我们的隐私内衣,外人不可窥见,只能自己知道。现在,让我们一起探究如何确保我们的数据像穿上隐身斗篷一样,安全又隐秘!

数据脱敏:保护个人隐私的斗篷

数据脱敏,就是将敏感信息转换成非敏感信息的过程。这就像是,你不希望别人知道你的真实体重,所以你在公共场合谈论体重时,只说“标准”而不是具体数字。

生活案例

比如在购物网站上,我们看到的订单信息,通常会隐藏部分手机号和地址信息,这样即便有人偷瞄到你的屏幕,也无法完整地获取你的个人信息。

实战:数据脱敏实例

假设我们有一个包含用户信息的表user_info,其中有一个字段是手机号phone_number

-- 假设这是我们的用户信息表
CREATE TABLE user_info (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    phone_number VARCHAR(20) NOT NULL
);

-- 插入一些示例数据
INSERT INTO user_info (name, phone_number) VALUES ('张三', '13800138000'), ('李四', '13900139000');

为了脱敏手机号,我们可以在查询时使用MySQL的字符串函数。

-- 查询时脱敏手机号中间四位
SELECT id, name, CONCAT(SUBSTRING(phone_number, 1, 3), '****', SUBSTRING(phone_number, 8)) AS phone_number FROM user_info;

这样,即使有人看到查询结果,也无法知道完整的手机号码。

加密:数据安全的保险箱

而数据加密,则是将数据转换成一种只有拥有密钥的人才能解读的形式。这就像是,你把家里珍贵的首饰放进保险箱,就算小偷进来了,也打不开它。

实战:数据加密实例

在MySQL中,我们可以使用内置的加密函数来加密数据。

-- 假设我们需要存储用户密码
ALTER TABLE user_info ADD COLUMN encrypted_password VARCHAR(255);

-- 使用AES加密用户密码
UPDATE user_info SET encrypted_password = AES_ENCRYPT('password123', 'my_secret_key');

在上面的代码中,我们使用了AES_ENCRYPT函数来加密用户密码,并存储在encrypted_password列中。这样,即使有人不法获取了数据库的数据,也无法直接读取用户的密码。

安全优化Tips

  • 对于敏感字段,如密码、个人信息等,始终使用加密存储。
  • 使用强加密算法,如AES。
  • 保护好密钥,不要在代码或配置文件中硬编码。

总结