MySQL 独特的用户机制
对于 MySQL 初学者来说,MySQL 的用户机制会让人一下子摸不着头脑。 MySQL 的用户名有不像 MS-SQL、Oracle 数据库那样单单只是个用户名。跟防火墙类似,它还包含了登陆限止机制。例如,对于下面三个 MySQL 用户名:
1. dba@'localhost' -- dba 只能从本机登陆
2. dba@'%' -- dba 可以从网络中任意机器访问 MySQL 服务器
3. dba@'192.168.1.201' -- dba 可以从 192.168.1.201 机器上访问 MySQL 服务器
MySQL 的用户机制太棒了!如果我们创建用户:
dba@'localhost'
dba@'192.168.1.201'
那么 dba 用户就只能从本机和IP地址为 192.168.1.201 的机器上连接 MySQL 服务器。并且这两个 dba 用户可以有各自不同权限和密码。这对于 MySQL 数据库安全来说,无疑又是一道重要保障。
另外需要注意的是:
一、对于 create user dba 来说,实际上等价于 create user dba@'%'。
mysql> user mysql;
mysql> select * from user;
+-----------+----------+-------------------------------------------
| Host | User | Password
+-----------+----------+-------------------------------------------
| localhost | root | *00B030D4A50E401A71BE65401BACC15BDF491830
+-----------+----------+-------------------------------------------
mysql> create user dba identified by 'dbaany';
mysql> select * from user;
+-----------+----------+-------------------------------------------
| Host | User | Password
+-----------+----------+-------------------------------------------
| localhost | root | *00B030D4A50E401A71BE65401BACC15BDF491830
| % | dba | *FF34267EA1B8DFE97F151870830EC8FE9DF816B4
+-----------+----------+-------------------------------------------
二、对于 MySQL 数据库中同时存在用户 dba@'localhost' 和 dba@'%' 来说,从本地访问 MySQL 时,用户应是 dba@'localhost';从远程访问 MySQL 时,用户环境应是 dba@'%'
mysql> create user dba@'localhost' identified by 'dbalocal';
mysql> select * from user;
+-----------+----------+-------------------------------------------
| Host | User | Password
+-----------+----------+-------------------------------------------
| localhost | root | *00B030D4A50E401A71BE65401BACC15BDF491830
| localhost | dba | *B44F37235B0B12C2DE1B9DF83105ACF23FA29EFF
| % | dba | *FF34267EA1B8DFE97F151870830EC8FE9DF816B4
+-----------+----------+-------------------------------------------
C:\>mysql -u dba -p
Enter password: dbaany
ERROR 1045 (28000): Access denied for user 'dba'@'localhost' (using password: YES)
C:\>mysql -u dba -p
Enter password: dbalocal
Welcome to the MySQL monitor. Commands end with ; or \g.
mysql>
三、访问 MySQL 数据库的时候,只需指定用户名 dba,而不是用户全名 dba@'localhost' 或者 dba'%'。
C:\>mysql -u dba@'localhost' -p
Enter password: dbalocal
ERROR 1045 (28000): Access denied for user 'dba@'localhost''@'localhost' (using password: YES)
C:\>mysql -u dba@'%' -p
Enter password: dbaany
ERROR 1045 (28000): Access denied for user 'dba@'%''@'localhost' (using password: YES)
C:\>mysql -u dba -p
Enter password: dbalocal
Welcome to the MySQL monitor.
mysql>
四、远程访问 MySQL 数据库时,应指定 host 参数。
mysql> create user dba@'192.168.1.110' identified by 'dba110';
mysql> select * from user;
+---------------+----------+-------------------------------------------
| Host | User | Password
+---------------+----------+-------------------------------------------
| localhost | root | *00B030D4A50E401A71BE65401BACC15BDF491830
| localhost | dba | *B44F37235B0B12C2DE1B9DF83105ACF23FA29EFF
| 192.168.1.110 | dba | *E298453C1D169F9C724BE989EFD5581BAB4381AE
| % | dba | *FF34267EA1B8DFE97F151870830EC8FE9DF816B4
+---------------+----------+-------------------------------------------
C:\>mysql -h 192.168.1.110 -u dba -p
Enter password: dba110
Welcome to the MySQL monitor.
mysql>
五、注意 mysql.user 表中用户 dba 的顺序,虽然我们创建 dba 用户的顺序是: 1. dba@'%' 2. dba@'localhost' 3. dba@'192.168.1.110'。但 MySQL 在处理用户登陆的时候却采用不同的顺序。
+---------------+----------+
| Host | User |
+---------------+----------+
| localhost | dba |
| 192.168.1.110 | dba |
| % | dba |
+---------------+----------+
如果 dba 用户在本机登陆,MySQL 首先尝试使用 dba@localhost 用户;如果该用户不存在,则 MySQL 会选择 dba@'%'用户来完成登陆。
如果 dba 用户在远程登陆,MySQL 首先尝试使用 dba@'192.168.1.110' 用户来登陆,如果 ip 地址不匹配,MySQL 最终会使用 dba@'%' 用户来完成登陆。当然,如果不存在 dba@'%',则登陆失败。
猜你喜欢
转载自regjtc.iteye.com/blog/1828834
今日推荐
周排行