当前位置:首页 > 行业动态 > 正文

如何在MySQL中新增加密数据?

在MySQL中增加数据时,可以使用INSERT语句。如果需要新增加密数据,可以在插入前使用加密函数对数据进行加密,然后将加密后的数据插入到数据库中。

在MySQL中增加和加密数据是确保敏感信息安全性的重要步骤,本文将详细介绍如何在MySQL数据库中插入并加密数据,包括使用内置的加密函数和Python脚本进行加密操作。

如何在MySQL中新增加密数据?  第1张

准备工作

为了便于演示,我们将创建两个表:一个用于存储原始明文数据,另一个用于存储加密后的数据。

-创建原始数据表
CREATE TABLEf_user (id int(11) NOT NULL AUTO_INCREMENT,name varchar(50) DEFAULT NULL,tel varchar(20) DEFAULT NULL,pwd varchar(50) DEFAULT NULL,
  PRIMARY KEY (id)
);
-新增原始数据
INSERT INTOf_user VALUES (1,'曹操','10000000000','Cc@123'),(2,'关羽','21000000000','Guanyu@21'),(3,'刘备','20000000000','LB#200000');
-创建加密数据表
CREATE TABLEf_user_m (id int(11) NOT NULL AUTO_INCREMENT,name varchar(200) DEFAULT NULL,tel varchar(100) DEFAULT NULL,pwd varbinary(255) DEFAULT NULL,
  PRIMARY KEY (id)
);

MySQL加密函数的方式

1. 使用AES_ENCRYPT和AES_DECRYPT函数加密和解密数据

我们需要将明文表中的数据加密后插入到加密表中,注意要记住加密的字符串,因为解密时需要用到这个值。

-加密密码字段
INSERT INTOf_user_m (name, tel, pwd) 
SELECT name, tel, AES_ENCRYPT(pwd, 'MySQL') FROM f_user;

查询加密后的数据如下:

id name tel pwd
1 曹操 10000000000 xF0K+!x15?…
2 关羽 21000000000 xR3Vhbnl1QDIx…
3 刘备 20000000000 xTEIjMjAwMDAw…

对于加密后的数据,可以使用AES_DECRYPT函数进行解密查看明文:

SELECT name, tel, AES_DECRYPT(pwd, 'MySQL') AS pwd FROM f_user_m;

结果如下:

name tel pwd
曹操 10000000000 Cc@123
关羽 21000000000 Guanyu@21
刘备 20000000000 LB#200000

2. 使用PASSWORD()函数加密密码

PASSWORD()函数可以将字符串加密成MySQL支持的加密格式,在插入记录时,可以将需要加密的字段的值作为PASSWORD()函数的参数。

INSERT INTO user_info (id, name, birthday, gender, password) VALUES 
(1, 'user1', '1999-07-01', '男', PASSWORD('user1')),
(2, 'user2', '1999-07-02', '女', PASSWORD('user2'));

需要注意的是,使用PASSWORD()函数加密的字符串是不可逆的,即无法通过已加密的字符串恢复出原始字符串,在使用PASSWORD()函数加密密码时,应该保证原始密码的安全性,以免被反面攻击者通过破解加密字符串获取密码。

Python base64加密方法

除了MySQL内置的加密函数外,我们还可以使用Python脚本对数据进行加密后再插入数据库中,以下是使用base64编码进行加密的示例:

#!/usr/bin/python
import pymysql as mdb
import base64
连接到MySQL数据库
sor_conn = mdb.connect(host='127.0.0.1', port=3306, user='root', passwd='Root@Py123')
sor_cur = sor_conn.cursor()
查询原始数据
v_sql = "SELECT name, tel, pwd FROM bak_db.f_user"
result_tb = sor_cur.execute(v_sql)
t = sor_cur.fetchall()
for col in t:
    v_name = col[0]
    v_tel = col[1]
    v_pwd = col[2]
    # 使用base64编码加密密码
    v_pwd = base64.encodestring(v_pwd)  # 加密
    v_sql_insert = "INSERT INTO bak_db.f_user_p (name, tel, pwd) VALUES ('%s', '%s', '%s')" % (v_name, v_tel, v_pwd)
    sor_cur.execute(v_sql_insert)
    sor_conn.commit()
sor_conn.close()

查询加密后的数据如下:

id name tel pwd
1 曹操 10000000000 Q2NAMTIz
2 关羽 21000000000 R3Vhbnl1QDIx
3 刘备 20000000000 TEIjMjAwMDAw

在MySQL中实现数据加密存储是确保数据安全的重要步骤,以下是一些最佳实践建议:

1、选择合适的加密算法:根据数据敏感性和性能要求选择合适的加密算法,对于高度敏感的数据,建议使用强加密算法如AES。

2、密钥管理:妥善管理加密密钥,确保密钥的安全性和可用性,可以考虑使用第三方密钥管理服务(如AWS KMS、Azure Key Vault)来管理密钥。

3、定期轮换密钥:定期更换加密密钥以减少密钥被破解的风险。

4、监控和审计:启用审计日志记录数据库操作日志,并定期检查日志以发现异常活动,配置告警系统以便在发现异常活动时立即通知管理员。

5、性能优化:数据加密可能会对数据库性能产生影响,在选择加密算法和密钥长度时需要考虑性能因素,并利用硬件加速等技术提高性能。

通过遵循这些最佳实践,可以有效地保护MySQL数据库中的敏感数据免受未授权访问和泄露的风险。

0