解释MySQL的用户机制_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@'%',则登陆失败。

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2013-03-14 08:32

浏览 482

分类:数据库

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值