如何在MySQL中新增加密数据?
- 行业动态
- 2025-01-07
- 2656
在MySQL中增加数据时,可以使用INSERT语句。如果需要新增加密数据,可以在插入前使用加密函数对数据进行加密,然后将加密后的数据插入到数据库中。
在MySQL中增加和加密数据是确保敏感信息安全性的重要步骤,本文将详细介绍如何在MySQL数据库中插入并加密数据,包括使用内置的加密函数和Python脚本进行加密操作。
准备工作
为了便于演示,我们将创建两个表:一个用于存储原始明文数据,另一个用于存储加密后的数据。
-创建原始数据表 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数据库中的敏感数据免受未授权访问和泄露的风险。
本站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本站,有问题联系侵删!
本文链接:http://www.xixizhuji.com/fuzhu/387570.html