MySQL 独特的用户机制

[size=medium]
对于 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@'%',则登陆失败。
[/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值