如果您正在运行使用MySQL的Web应用程序,那么它把密码或者其他敏感信息保存在应用程序里的机会就很大。保护这些数据免受黑客或者窥探者的获取是一个令人关注的重要问题,因为您既不能让未经授权的人员使用或者破坏应用程序,同时还要保证您的竞争优势。幸运的是,MySQL
带有很多设计用来提供这种类型安全的加密函数。本文概述了其中的一些函数,并说明了如何使用它们,以及它们能够提供的不同级别的安全。
双向加密
就让我们从最简单的加密
开始:双向加密。在这里,一段数据通过一个密钥被加密,只能够由知道这个密钥的人来解密。MySQL有两个函数来支持这种类型的加密,分别叫做ENCODE()
和DECODE()
。下面是一个简单的实例:
mysql> INSERT INTO users (username, password) VALUES ('joe', ENCODE('guessme', 'abracadabra'));
Query OK, 1 row affected (0.14 sec)
其中,Joe的密码是guessme
,它通过密钥abracadabra
被加密。要注意的是,加密完的结果是一个二进制字符串,如下所示:
mysql> SELECT * FROM users WHERE username='joe';
+----------+----------+
| username | password |
+----------+----------+
| joe | ¡?i??!? |
+----------+----------+
1 row in set (0.02 sec)
abracadabra
这个密钥对于恢复到原始的字符串至关重要。这个密钥必须被传递给DECODE()
函数,以获得原始的、未加密的密码。下面就是它的使用方法:
mysql> SELECT DECODE(password, 'abracadabra') FROM users WHERE username='joe';
+---------------------------------+
| DECODE(password, 'abracadabra') |
+---------------------------------+
| guessme |
+---------------------------------+
1 row in set (0.00 sec)
应该很容易就看到它在Web应用程序里是如何运行的——在验证用户登录的时候,DECODE()
会用网站专用的密钥解开保存在数据库里的密码,并和用户输入的内容进行对比。假设您把PHP用作自己的脚本语言,那么可以像下面这样进行查询:
<?php
$query = "SELECT COUNT(*) FROM users WHERE username='$inputUser' AND DECODE(password, 'abracadabra') = '$inputPass'";?>
提示:
虽然
ENCODE()
和
DECODE()
这两个函数能够满足大多数的要求,但是有的时候您希望使用强度更高的加密手段。在这种情况下,您可以使用
AES_ENCRYPT()
和
AES_DECRYPT()
函数,它们的工作方式是相同的,但是加密强度更高。
单向加密
单向加密与双向加密不同,一旦数据被加密就没有办法颠倒这一过程。因此密码的验证包括对用户输入内容的重新加密,并将它与保存的密文进行比对,看是否匹配。一种简单的单向加密方式是MD5校验码。MySQL的MD5()
函数会为您的数据创建一个“指纹”并将它保存起来,供验证测试使用。下面就是如何使用它的一个简单例子:
mysql> INSERT INTO users (username, password) VALUES ('joe', MD5('guessme'));
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM users WHERE username='joe';
+----------+----------------------------------+
| username | password |
+----------+----------------------------------+
| joe | 81a58e89df1f34c5487568e17327a219 |
+----------+----------------------------------+
1 row in set (0.02 sec)
现在您可以测试用户输入的内容是否与已经保存的密码匹配,方法是取得用户输入密码的MD5校验码,并将它与已经保存的密码进行比对,就像下面这样:
mysql> SELECT COUNT(*) FROM users WHERE username='joe' AND password=MD5('guessme');
+----------+
| COUNT(*) |
+----------+
| 1 |
+----------+
1 row in set (0.00 sec)
或者,您考虑一下使用ENCRYPT()
函数,它使用系统底层的crypt()
系统调用来完成加密。这个函数有两个参数:一个是要被加密的字符串,另一个是双(或者多)字符的“salt”。它然后会用salt加密字符串;这个salt然后可以被用来再次加密用户输入的内容,并将它与先前加密的字符串进行比对。下面一个例子说明了如何使用它:
mysql> INSERT INTO users (username, password) VALUES ('joe', ENCRYPT('guessme', 'ab'));
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM users WHERE username='joe';
+----------+---------------+
| username | password |
+----------+---------------+
| joe | ab/G8gtZdMwak |
+----------+---------------+
1 row in set (0.00 sec)
结果是
mysql> SELECT COUNT(*) FROM users WHERE username='joe' AND password=ENCRYPT('guessme', 'ab');
+----------+
| COUNT(*) |
+----------+
| 1 |
+----------+
1 row in set (0.00 sec)
提示:
ENCRYPT()
只能用在
*NIX
系统上,因为它需要用到底层的
crypt()
库。
幸运的是,上面的例子说明了能够如何利用MySQL对您的数据进行单向和双向的加密,并告诉了您一些关于如何保护数据库和其他敏感数据库信息安全的理念。祝您编程愉快!
分享到:
相关推荐
总结一下,MySQL为Web开发者提供了多种加密和哈希函数,帮助保护敏感数据。双向加密如ENCODE()和DECODE()适用于需要解密的数据,而单向加密如MD5()(以及更安全的替代方案)则用于密码等不可逆的加密需求。在实际...
16.2.1 访问或修改敏感数据 16.2.2 数据丢失或破坏 16.2.3 拒绝服务 16.2.4 恶意代码注入 16.2.5 服务器被攻破 16.3了解与我们“打交道”的用户 16.3.1 破解人员 16.3.2 受影响机器的未知情用户 16.3.3 对公司不满的...
4. **《PHP Security》**:专门针对PHP安全性的书籍,深入探讨了如何构建安全的应用程序,包括防止XSS、CSRF等攻击方式,以及如何保护敏感数据等主题。 5. **《MySQL Cookbook》**:类似于《PHP Cookbook》,但...
6. **安全性与性能**:掌握最佳实践,比如使用预处理语句、加密敏感数据、限制数据库权限,以及优化查询以提升性能。 7. **错误处理与调试**:了解如何在PHP和MySQL中捕获和处理错误,以及使用日志记录工具进行问题...
16.2.1 访问或修改敏感数据 16.2.2 数据丢失或破坏 16.2.3 拒绝服务 16.2.4 恶意代码注入 16.2.5 服务器被攻破 16.3了解与我们“打交道”的用户 16.3.1 破解人员 16.3.2 受影响机器的未知情用户 16.3.3 对公司不满的...
此外,还会涉及密码哈希和加密,以保护用户的敏感信息。 除了基本的开发技术,本书还涵盖了Web开发的其他重要方面,如使用session和cookie管理用户状态,实现用户认证和授权。此外,你还将学习如何利用PHP的模板...
在处理敏感信息时,要确保所有通信都是加密的,以保护数据隐私。 总的来说,当PHPmyadmin的默认功能不足以应对大数据操作时,编写自定义脚本是一种有效的解决方案。这需要对PHP、MySQL以及文件操作有深入理解,以...
16.2.1 访问或修改敏感数据 16.2.2 数据丢失或破坏 16.2.3 拒绝服务 16.2.4 恶意代码注入 16.2.5 服务器被攻破 16.3了解与我们“打交道”的用户 16.3.1 破解人员 16.3.2 受影响机器的未知情用户 16.3.3 对公司不满的...
7. **数据分析与可视化**:除了基本的数据存储,还可以利用MySQL的聚合函数和连接操作进行数据分析。此外,结合前端工具如Tableau或Python的matplotlib库,可以将姓氏数据可视化,例如制作姓氏分布地图或频率条形图...
- 对敏感数据进行加密存储,启用SSL连接以保证传输安全。 6. **与其他软件集成**: - MySQL可与各种Web框架(如PHP, Python, Ruby, Java等)无缝集成,作为后端数据库。 - 支持与开发工具(如Visual Studio Code...
除此之外,此版本还加强了JSON支持,增加了对JSON路径表达式和JSON函数的丰富功能,使MySQL在处理半结构化数据时更为灵活,满足现代Web应用的需求。同时,改进了SQL标准的兼容性,如窗口函数和 common table ...
7. **安全**:考虑安全性,比如防止SQL注入、XSS攻击,使用HTTPS,以及对敏感数据的加密。 8. **API文档**:生成清晰的API文档,可以使用Swagger等工具。 通过以上步骤,你将能够构建一个完整的、集成了Gin、MySQL...
新版MySQL提供了增强的数据加密功能,包括加密文件系统和透明数据加密,以保护敏感信息。 9. **复制与高可用性**: MySQL 8.0的复制功能得到了增强,支持多源复制和GTID(全局事务标识符)复制,使得故障切换和...
首先,要进行MySQL数据库的备份,我们需要利用MySQL提供的命令行工具或者API接口。在C#中,我们可以使用`MySqlCommand`类执行SQL语句来完成这个任务。通常,备份数据库的SQL语句是`mysqldump`命令,但在C#中,我们...
9. **安全性**:安全方面,应遵循最小权限原则,限制用户权限,使用预处理语句防止 SQL 注入,定期备份并加密敏感数据。 10. **连接池与持久连接**:为了提高应用性能,可以使用连接池或持久连接。持久连接允许多个...
3. 数据加密:启用InnoDB表空间加密,保护敏感数据。 四、数据库操作 1. 客户端连接:使用“mysql.exe”命令行客户端或图形化工具(如MySQL Workbench)连接数据库。 2. 数据库创建:使用CREATE DATABASE语句创建新...
1. **安全性**:确保SQL注入防护,使用预编译语句,限制权限,以及加密敏感数据。 2. **性能**:优化查询,减少数据库访问,合理设计索引,使用缓存策略。 3. **可扩展性**:设计松耦合的架构,方便添加新功能或扩展...
书中会详细解释如何设置用户权限,保护敏感数据,以及如何利用SSL等技术确保数据传输的安全性。 最后,书中可能会涵盖一些实战案例,让读者将所学知识应用于实际项目中,例如网站后台数据库的设计、数据分析与报告...