数据库中的加密
数据加密
如何能让数据库比较安全呢?
mysql中提供了一些列加密函数,加密函数主要用来对数据进行加密和界面处理,以保证某些重要数据不被别人获取。这些函数在保证数据库安全时非常有用
MD5(str)加密函数
MD5(str)为字符串算出一个MD5 128比特校验和。该值以32位十六进制数字的二进制字符串形式返回,若参数为NULL,则会返回NULL。
mysql> select md5('weyui');
+----------------------------------+
| md5('weyui') |
+----------------------------------+
| 0752cfa48527ad63886b069b7b191c84 |
+----------------------------------+
1 row in set (0.00 sec)
SHA(str)加密函数
SHA(str)从原明文密码str计算并返回加密后的密码字符串,当参数为NULL时,返回NULL。
mysql> select sha('weyui');
+------------------------------------------+
| sha('weyui') |
+------------------------------------------+
| 7769cfc05bc65a3a0468dd439c9e093869939005 |
+------------------------------------------+
1 row in set (0.00 sec)
MD5(str)与SHA(str)加密方式对比
mysql> select md5('weyui'),sha('weyui');
+----------------------------------+------------------------------------------+
| md5('weyui') | sha('weyui') |
+----------------------------------+------------------------------------------+
| 0752cfa48527ad63886b069b7b191c84 | 7769cfc05bc65a3a0468dd439c9e093869939005 |
+----------------------------------+------------------------------------------+
1 row in set (0.00 sec)
从加密后的数据来看,SHA加密算法比MD5更加安全。
SHA2(str, hash_length)加密函数
SHA2(str, hash_length)使用hash_length作为长度,加密str。hash_length支持的值为224、256、384、512和0。其中,0等同于256。
mysql> select sha2('weyui',256);
+------------------------------------------------------------------+
| sha2('weyui',256) |
+------------------------------------------------------------------+
| 90a49f4112f54760730a32f1e866f058e476cf7c6c5bd728454e5796d572539d |
+------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> select sha2('weyui',0);
+------------------------------------------------------------------+
| sha2('weyui',0) |
+------------------------------------------------------------------+
| 90a49f4112f54760730a32f1e866f058e476cf7c6c5bd728454e5796d572539d |
+------------------------------------------------------------------+
1 row in set (0.00 sec)
随着加密算法的演变,加密的强度越来愈大,sha2()可以自定义加密的强度;
数据库加密的守门员--------(9.3更新)
今天突然想到了一个点,就是我们再用一些图形化软件的时候在登陆mysql8.0版本的数据库时会遇到一个问题
在输入数据库账户密码时及时密码输入正确也会提示----- 2059错误,原因就在于加密的方式不一样,
好不容易找到了一个截图—这是navicat的------
这是sqylog 的----
我们当时的操作是 修改数据库的加密规则为 mysql_native_password
,在修改之前我们先查看一下数据库的账户密码加密规则----
--- 通过查找参数发现默认的加密规则为caching_sha2_password---
mysql> show variables like 'default_authentication_plugin';
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| default_authentication_plugin | caching_sha2_password |
+-------------------------------+-----------------------+
1 row in set, 1 warning (0.01 sec)
--- 再来看用户的密码加密方式
mysql> select host,user,plugin from mysql.user;
+-----------+------------------+-----------------------+
| host | user | plugin |
+-----------+------------------+-----------------------+
| % | gavin | caching_sha2_password |
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session | caching_sha2_password |
| localhost | mysql.sys | caching_sha2_password |
| localhost | root | caching_sha2_password |
+-----------+------------------+-----------------------+
5 rows in set (0.00 sec)
如何解决问题------ 修改加密的密码为经过— mysql_native_password 加密的格式-
mysql> alter user 用户 identified with mysql_native_password by '密码' ;
Query OK, 0 rows affected (0.03 sec)
由于密码作为数据库加密的第一道防线,sha2 的加密强度比 mysql_native_password 的方式要强,所以我们在安装的时候就会推荐我们按照 sha2 的方式加密----
翻了一下官方的源码-----
mysql8.0 的新特性----
caching_sha2_password as the Preferred Authentication Plugin
/*This change applies only to new accounts created after installing or upgrading to MySQL 8.0 or higher. For accounts already existing in an upgraded installation, their authentication plugin remains unchanged. Existing users who wish to switch to caching_sha2_password can do so using the ALTER USER statement:*/
ALTER USER user
IDENTIFIED WITH caching_sha2_password
BY 'password';
根据官方给出的代码,我们改回 mysql_native_password 不难吧。