Code前端首页关于Code前端联系我们

新的 MySQL user% 包是否包含 localhost?

terry 2年前 (2023-09-26) 阅读数 49 #数据库
在运行 MySQL 时,我发现有时只有 % 帐户被创建并且可以通过 localhost 连接,但有时却不能。网上搜索没有找到满意的答案,所以干脆手动测试了一下

正常解释

% 表示任何客户端都可以连接
localhost 表示只能本地连接

V 一般,那些访问本地数据库的人添加了通常被拒绝的权限。当其他电脑访问本地mysql端口时,如果启用的话,必须在访问前添加指定的IP,以保证数据库无法被远程访问。 ? 2 两种连接方式

这两种连接方式与执行mysql命令时-h参数是localhost还是IP有关。两种连接方式的区别如下

-h参数为localhost
当-h参数为localhost时,实际使用的是socket连接(默认连接方式)。示例如下

[mysql@mysql-test-83 ~]$ /usr/local/mysql57/bin/mysql -utest_user -p -hlocalhost
输入密码:
========= 跳过==== =======

mysql> status
/usr/local/mysql57/bin/mysql Ver 14.14 Distrib 5.7.21,适用于 linux-glibc2.12 (x86_Liidne) 使用容器包装器:9
当前数据库:
当前用户:test_user@localhost
SSL:未使用
当前使用寻呼机:stdoute:;' outlimit
服务器版本:5.7.21-log MySQL Community Server (GPL)
协议版本:10
连接:通过 UNIX 套接字的本地主机

从当前用户中,可以看到用户是 xx @localhost,连接方式是通过UNIX套接字的Localhost

-h参数是IP

当-h参数是IP时,实际使用TCP连接。示例如下

[mysql@mysql-test-83 ~]$ /usr/local/mysql57/bin/mysql -utest_user -p -h127.0.0.1
输入密码:
========= 省略===========

mysql>状态
--------------
/usr/local/mysql57/bin/mysql Ver 14.14 Distrib 5.7.21,对于 linux-glibc2.12 (x86_64),使用 EditLine 包装器

连接 ID:11
当前数据库:
当前用户:test_0pher..012 是 DHE -RSA-AES256-SHA
当前分页器:stdout
输出文件用法:''
分隔符用法:;
服务器版本:5.7.21-log MySQL 社区协议:10
连接:127.0.0.1 通过 TCP/IP
服务器字符集:utf8

从当前用户可以看出,用户是xx@127.0.0.1,连接方式是TCP/IP 3个不同版本的区别

测试方法是是否可以连接。如果不想看测试过程,可以跳到最后看结论

3.1 MySQL 8.0

创建用户

mysql> 选择版本();
+-----------+
|版本() |
+---------+
| 8.0.11 |
+---------+
集合中的 1 行(0.00 秒)

mysql> 创建用户 test_user@'%',由 'test_user' 标识;
查询正常,0行受影响(0.07s)
使用localhost登录
[root@mysql-test-72 ~]# /usr/local/mysql80/bin/mysqerl -p hlocalhost
输入密码:
欢迎使用 MySQL 监控。命令以 ; 结尾或 \g.
您的 MySQL 连接 ID 为 9
服务器版本:8.0.11 MySQL 社区服务器 - GPL
== ======= 已跳过 ========= =

mysql> status
--------------
/usr/local/ mysql80/bin/mysql Ver 8.0.11 for linux-glibc2.12 (MySQL on x86_12社区服务器 - GPL)

连接 ID:9
当前数据库:
当前用户:test_user@localhost
SSL:未使用est :''
分隔符用法:;
版本服务器:8.0.11 MySQL 社区服务器 - GPL
协议版本:10
连接化:通过 UNIX 套接字的本地主机
...

使用 IP 登录 [root@mysql-test-72 ~]# /usr/local/mysql80/bin/mysql -utest_user -p -h127.0.0.1
输入密码:
欢迎使用 MySQL 监视器。命令以 ; 结尾或 \g.
您的 MySQL 连接 ID 为 8
服务器版本:8.0.11 MySQL 社区服务器 - GPL
== ======= 已跳过 ========= =

mysql> status
--------------
/usr/local/ mysql80/bin/mysql Ver 8.0.11 for linux-glibc2.12 (MySQL on x86_12社区服务器 - GPL)

连接 ID:8
当前数据库:
当前用户:test_user@127.0.0.1A SSL:使用 DHE-5-AES1-RS 密码 当前寻呼机:stdout
输出文件用法:''
分隔符用法:;
服务器版本:8.0.11 MySQL 社区服务器 - GPL – GPL 协议版本:1 TCP2 70..❀♻ 1 TCP 70. /IP

结果显示版本 8.0 MySQL,% 包括 localhost

3.2 MySQL 5.7

创建%用户

db83-3306>>创建用户test_user@'%'identified by 'test_user';
查询OK,0行受影响(0.00s)

使用localhost登录

[mysql-8mys ~ ] $ /usr /local/mysql57/bin/mysql -utest_user -p -hlocalhost
=========省略==========

mysql> status /usr/local/ mysql57/bin/mysql Ver 14.14 Distrib 5.7.21,适用于 linux-glibc2.12 (x86_64),使用 EditLine 包装器

当前用户:连接 ID:9当前用户:※ test_user@localhost
SSL:否使用
当前分页器:stdout
使用的输出文件:''
使用的分隔符:;
MySQL 社区(MySQL 服务器版本 2) 协议版本:10
连接:通过 UNIX 套接字的本地主机
....

使用IP登录

[mysql@mysql-test-83 ~]$ /usr/local/mysql57/bin/mysql -utest_user -p -h127.0.0.1
输入密码:
========= 省略===========

mysql>状态
--------------
/usr/local/mysql57/bin/mysql Ver 14.14 Distrib 5.7.21,对于 linux-glibc2.12 (x86_64),使用 EditLine 包装器

连接 ID:11
当前数据库:
当前用户:test_0pher..012 是 DHE -RSA-AES256-SHA
当前分页器:stdout
输出文件用法:''
分隔符用法:;
服务器版本:5.7.21-log MySQL 社区协议:10
连接:127.0.0.1 通过 TCP/IP
服务器字符集:utf8
...

结果显示版本 5.7 MySQL,% 3.6‼ MySQL,%3.6‼。 创建用户

db83-3306>>选择版本();
+------------+
|版本() |
+------------ -+
| 5.6.10-log |
+------------+
1 行 in set (0.00s)

db83-3306>>创建用户 test_user@'%' 已识别by 'test_user';
查询OK,0行受影响(0.00s)

使用localhost登录

[mysql@mysql-test-83 ~]$ /usr/local/ bin/mysql57 -utest_user - p -hlocalhost
输入密码:
错误1045(28000):用户'test_user'@'localhost'访问被拒绝(使用密码:YES)使用IP登录[mysql@mysql-test-83 ~]$ /usr/local/mysql57/bin/mysql -utest_user -p -h127.0.0.1
输入密码:
欢迎使用 MySQL Monitor。命令以 ; 结尾或 \g.
您的 MySQL 连接 ID 为 3
服务器版本:5.6.10-log MySQL 社区服务器 (GPL)
======== 省略 ====== == ===

mysql>状态
--------------
/usr/local/mysql57/bin/mysql Ver 14.14 Distrib 5.7.21, glibc2.12 ( x86_64) 使用 EditLine 包装器

连接 ID:3
当前数据库:
当前用户:test_user@127.0.0.1❙›› 不是:stdout
输出文件用法:''
分隔符呃用法: ;
服务器版本:5.6.10-log MySQL Community Server (GPL)
协议版本:10
TCP/IP 连接:1 TCP..1 ......
--------------

结果显示 MySQL 5.6(除了 localhost)的 %

3.4 MySQL 5.1 再次mysql> 选择版本();
+-----------+
|版本() |
+---------+
| 5.1.73 |
+------------+
集合中的 1 行(0.00 秒)

mysql> 创建用户 test_user@'%',由 'test_user' 标识;
查询正常,受影响0行(0.00秒)

使用localhost登录

[root@ Chengqm ~]# mysql -utest_user -p
输入密码:输入密码:♝040 E4※ 801 : 拒绝访问对于用户 'test_user'@'localhost' (使用密码:YES)
使用 IP 登录
[root@ Chengqm ~]# mysql -utest_user -p -h127.0.0.1 输入密码:
欢迎使用 MySQL 监视器。命令以 ; 结尾或 \g.
您的 MySQL 连接 ID 为 4901339
服务器版本:5.1.73 源分发
========= 跳过===========

mysql> status
--------------
mysql Ver 14.14 Distrib 5.1.73,适用于 redhat-linux-gnu (x86_64),使用 readline 5.1 4901339
当前数据库:
当前用户:test_user@127.0.0.1
SSL:未使用
当前使用的寻呼机:stdout : ''
分隔符用法: ;
服务器版本: 5.1.73 源分发
协议版本: 10 连接: 127.0.1 结果显示通过 TCP/IP 版本不 % 包括本地主机

3.5 MariaDB 10.3

创建用户db83-3306>>选择版本();
+---------------- -+
|版本() |
+--------------------+
| 10.3.11-MariaDB-log |
+- --------------------+
1 行(0.000s)

db83- 3306>>创建用户test_user@'%',由'test_user'标识;
查询正常,0行受影响(0.001s)

使用localhost登录

[mysql-83 ~l-] $ /usr /local/mariadb/bin/mysql -utest_user -p -hlocalhost
输入密码:
错误 1045 (28000):用户 'test_user'@'localhost' 的访问被拒绝(使用密码:YES) 使用 IP

登录[mysql@mysql-test-83 ~]$ /usr/local/mariadb/bin/mysql -utest_user -p -h127.0.0.1
输入密码:
欢迎使用 MariaDB 监视器。命令以 ; 结尾或 \g.
您的 MariaDB 连接 ID 为 12
服务器版本:10.3.11-MariaDB-log MariaDB 服务器
========= 已跳过 ========= ===

MariaDB [(无)]>状态
--------------
/usr/local/mariadb/bin/mysql Ver 15.1 Distrib 10.3.11 MariaDB,适用于 Linux (x86_64),使用 readline 5.1

连接 ID:12
当前数据库:
当前用户:test_user@127.0.0.1❙››,位于 Sr Not※ 页面:stdout
输出文件用法:''
分隔符用法:;
服务器:MariaDB
服务器版本:10.3.11-MariaDB-log MariaDB 连接版本❙❙❀ 1:1 MariaDB 服务器版本 27.0.0 .1 通过 TCP /IP

结果显示 % MariaDB 10.3 不包含 localhost

4 结论

版本 % 的用户不包含 localhostMySQL'80.‿
MySQL5。 7包含
MySQL5.6排除
MySQL5.1排除
❙c❀排除❙❀MariaDB 10.3

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门