系统管理 维护监控 简单生活
mysql
MySQL 独特的用户机制
十 14th
MySQL 的用户名跟防火墙类似,它还包含了登陆限制机制。例如,对于下面三个 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@'%',则登陆失败。
最新评论