bluestones

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

MySQL用户中的%到底包不包括localhost?

MySQL用户中的%到底包不包括localhost?

1 前言

操作MySQL的时候发现,有时只建了%的账号,可以通过localhost连接,有时候却不可以,网上搜索也找不到满意的答案,干脆手动测试一波

2 两种连接方法

这里说的两种连接方法指是执行mysql命令时,-h参数填的是localhost还是IP, 两种连接方式的区别如下

-h 参数为 localhost

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

  1.  
    [mysql@mysql-test-83 ~]$ /usr/local/mysql57/bin/mysql -utest_user -p -hlocalhost
  2.  
    Enter password:
  3.  
    ========= 省略 ===========
  4.  
     
  5.  
    mysql> status
  6.  
    /usr/local/mysql57/bin/mysql Ver 14.14 Distrib 5.7.21, for linux-glibc2.12 (x86_64) using EditLine wrapper
  7.  
     
  8.  
    Connection id: 9
  9.  
    Current database:
  10.  
    Current user: test_user@localhost
  11.  
    SSL: Not in use
  12.  
    Current pager: stdout
  13.  
    Using outfile: ''
  14.  
    Using delimiter: ;
  15.  
    Server version: 5.7.21-log MySQL Community Server (GPL)
  16.  
    Protocol version: 10
  17.  
    Connection: Localhost via UNIX socket

Current user可以看到用户是xx@localhost, 连接方式为Localhost via UNIX socket

-h 参数为 IP

-h参数为IP的时候,实际上是使用TCP连接的, 实例如下

  1.  
    [mysql@mysql-test-83 ~]$ /usr/local/mysql57/bin/mysql -utest_user -p -h127.0.0.1
  2.  
    Enter password:
  3.  
    ========= 省略 ===========
  4.  
     
  5.  
    mysql> status
  6.  
    --------------
  7.  
    /usr/local/mysql57/bin/mysql Ver 14.14 Distrib 5.7.21, for linux-glibc2.12 (x86_64) using EditLine wrapper
  8.  
     
  9.  
    Connection id: 11
  10.  
    Current database:
  11.  
    Current user: test_user@127.0.0.1
  12.  
    SSL: Cipher in use is DHE-RSA-AES256-SHA
  13.  
    Current pager: stdout
  14.  
    Using outfile: ''
  15.  
    Using delimiter: ;
  16.  
    Server version: 5.7.21-log MySQL Community Server (GPL)
  17.  
    Protocol version: 10
  18.  
    Connection: 127.0.0.1 via TCP/IP
  19.  
    Server characterset: utf8

Current user可以看到用户是xx@127.0.0.1, 连接方式为TCP/IP

3 不同版本的差别

测试方法就是看能不能连接,如果不想看测试过程可以拉到最后看结论

3.1 MySQL 8.0

创建用户

  1.  
    mysql> select version();
  2.  
    +-----------+
  3.  
    | version() |
  4.  
    +-----------+
  5.  
    | 8.0.11 |
  6.  
    +-----------+
  7.  
    1 row in set (0.00 sec)
  8.  
     
  9.  
    mysql> create user test_user@'%' identified by 'test_user';
  10.  
    Query OK, 0 rows affected (0.07 sec)

使用 localhost 登录

  1.  
    [root@mysql-test-72 ~]# /usr/local/mysql80/bin/mysql -utest_user -p -hlocalhost
  2.  
    Enter password:
  3.  
    Welcome to the MySQL monitor. Commands end with ; or \g.
  4.  
    Your MySQL connection id is 9
  5.  
    Server version: 8.0.11 MySQL Community Server - GPL
  6.  
    ========= 省略 ===========
  7.  
     
  8.  
    mysql> status
  9.  
    --------------
  10.  
    /usr/local/mysql80/bin/mysql Ver 8.0.11 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)
  11.  
     
  12.  
    Connection id: 9
  13.  
    Current database:
  14.  
    Current user: test_user@localhost
  15.  
    SSL: Not in use
  16.  
    Current pager: stdout
  17.  
    Using outfile: ''
  18.  
    Using delimiter: ;
  19.  
    Server version: 8.0.11 MySQL Community Server - GPL
  20.  
    Protocol version: 10
  21.  
    Connection: Localhost via UNIX socket
  22.  
    ...

使用 IP 登录

  1.  
    [root@mysql-test-72 ~]# /usr/local/mysql80/bin/mysql -utest_user -p -h127.0.0.1
  2.  
    Enter password:
  3.  
    Welcome to the MySQL monitor. Commands end with ; or \g.
  4.  
    Your MySQL connection id is 8
  5.  
    Server version: 8.0.11 MySQL Community Server - GPL
  6.  
    ========= 省略 ===========
  7.  
     
  8.  
    mysql> status
  9.  
    --------------
  10.  
    /usr/local/mysql80/bin/mysql Ver 8.0.11 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)
  11.  
     
  12.  
    Connection id: 8
  13.  
    Current database:
  14.  
    Current user: test_user@127.0.0.1
  15.  
    SSL: Cipher in use is DHE-RSA-AES128-GCM-SHA256
  16.  
    Current pager: stdout
  17.  
    Using outfile: ''
  18.  
    Using delimiter: ;
  19.  
    Server version: 8.0.11 MySQL Community Server - GPL
  20.  
    Protocol version: 10
  21.  
    Connection: 127.0.0.1 via TCP/IP

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

3.2 MySQL 5.7

创建 % 用户

  1.  
    db83-3306>>create user test_user@'%' identified by 'test_user';
  2.  
    Query OK, 0 rows affected (0.00 sec)

使用 localhost 登录

  1.  
    [mysql@mysql-test-83 ~]$ /usr/local/mysql57/bin/mysql -utest_user -p -hlocalhost
  2.  
    ========= 省略 ===========
  3.  
     
  4.  
    mysql> status
  5.  
    /usr/local/mysql57/bin/mysql Ver 14.14 Distrib 5.7.21, for linux-glibc2.12 (x86_64) using EditLine wrapper
  6.  
     
  7.  
    Connection id: 9
  8.  
    Current database:
  9.  
    Current user: test_user@localhost
  10.  
    SSL: Not in use
  11.  
    Current pager: stdout
  12.  
    Using outfile: ''
  13.  
    Using delimiter: ;
  14.  
    Server version: 5.7.21-log MySQL Community Server (GPL)
  15.  
    Protocol version: 10
  16.  
    Connection: Localhost via UNIX socket
  17.  
    ....

使用 IP 登录

  1.  
    [mysql@mysql-test-83 ~]$ /usr/local/mysql57/bin/mysql -utest_user -p -h127.0.0.1
  2.  
    Enter password:
  3.  
    ========= 省略 ===========
  4.  
     
  5.  
    mysql> status
  6.  
    --------------
  7.  
    /usr/local/mysql57/bin/mysql Ver 14.14 Distrib 5.7.21, for linux-glibc2.12 (x86_64) using EditLine wrapper
  8.  
     
  9.  
    Connection id: 11
  10.  
    Current database:
  11.  
    Current user: test_user@127.0.0.1
  12.  
    SSL: Cipher in use is DHE-RSA-AES256-SHA
  13.  
    Current pager: stdout
  14.  
    Using outfile: ''
  15.  
    Using delimiter: ;
  16.  
    Server version: 5.7.21-log MySQL Community Server (GPL)
  17.  
    Protocol version: 10
  18.  
    Connection: 127.0.0.1 via TCP/IP
  19.  
    Server characterset: utf8
  20.  
    ...

结果显示5.7版本的MySQL% 包括localhost

3.3 MySQL 5.6

创建用户

  1.  
    db83-3306>>select version();
  2.  
    +------------+
  3.  
    | version() |
  4.  
    +------------+
  5.  
    | 5.6.10-log |
  6.  
    +------------+
  7.  
    1 row in set (0.00 sec)
  8.  
     
  9.  
    db83-3306>>create user test_user@'%' identified by 'test_user';
  10.  
    Query OK, 0 rows affected (0.00 sec)

使用 localhost 登录

  1.  
    [mysql@mysql-test-83 ~]$ /usr/local/mysql57/bin/mysql -utest_user -p -hlocalhost
  2.  
    Enter password:
  3.  
    ERROR 1045 (28000): Access denied for user 'test_user'@'localhost' (using password: YES)

使用 IP 登录

  1.  
    [mysql@mysql-test-83 ~]$ /usr/local/mysql57/bin/mysql -utest_user -p -h127.0.0.1
  2.  
    Enter password:
  3.  
    Welcome to the MySQL monitor. Commands end with ; or \g.
  4.  
    Your MySQL connection id is 3
  5.  
    Server version: 5.6.10-log MySQL Community Server (GPL)
  6.  
    ========= 省略 ===========
  7.  
     
  8.  
    mysql> status
  9.  
    --------------
  10.  
    /usr/local/mysql57/bin/mysql Ver 14.14 Distrib 5.7.21, for linux-glibc2.12 (x86_64) using EditLine wrapper
  11.  
     
  12.  
    Connection id: 3
  13.  
    Current database:
  14.  
    Current user: test_user@127.0.0.1
  15.  
    SSL: Not in use
  16.  
    Current pager: stdout
  17.  
    Using outfile: ''
  18.  
    Using delimiter: ;
  19.  
    Server version: 5.6.10-log MySQL Community Server (GPL)
  20.  
    Protocol version: 10
  21.  
    Connection: 127.0.0.1 via TCP/IP
  22.  
    ......
  23.  
    --------------

结果显示MySQL 5.6%不包括localhost

3.4 MySQL 5.1

创建用户

  1.  
    mysql> select version();
  2.  
    +-----------+
  3.  
    | version() |
  4.  
    +-----------+
  5.  
    | 5.1.73 |
  6.  
    +-----------+
  7.  
    1 row in set (0.00 sec)
  8.  
     
  9.  
    mysql> create user test_user@'%' identified by 'test_user';
  10.  
    Query OK, 0 rows affected (0.00 sec)

使用 localhost 登录

  1.  
    [root@chengqm ~]# mysql -utest_user -p
  2.  
    Enter password:
  3.  
    ERROR 1045 (28000): Access denied for user 'test_user'@'localhost' (using password: YES)

使用 IP 登录

  1.  
    [root@chengqm ~]# mysql -utest_user -p -h127.0.0.1
  2.  
    Enter password:
  3.  
    Welcome to the MySQL monitor. Commands end with ; or \g.
  4.  
    Your MySQL connection id is 4901339
  5.  
    Server version: 5.1.73 Source distribution
  6.  
    ========= 省略 ===========
  7.  
     
  8.  
    mysql> status
  9.  
    --------------
  10.  
    mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1
  11.  
     
  12.  
    Connection id: 4901339
  13.  
    Current database:
  14.  
    Current user: test_user@127.0.0.1
  15.  
    SSL: Not in use
  16.  
    Current pager: stdout
  17.  
    Using outfile: ''
  18.  
    Using delimiter: ;
  19.  
    Server version: 5.1.73 Source distribution
  20.  
    Protocol version: 10
  21.  
    Connection: 127.0.0.1 via TCP/IP

结果显示 5.1 版本的%不包括localhost

3.5 MariaDB 10.3

创建用户

  1.  
    db83-3306>>select version();
  2.  
    +---------------------+
  3.  
    | version() |
  4.  
    +---------------------+
  5.  
    | 10.3.11-MariaDB-log |
  6.  
    +---------------------+
  7.  
    1 row in set (0.000 sec)
  8.  
     
  9.  
    db83-3306>>create user test_user@'%' identified by 'test_user';
  10.  
    Query OK, 0 rows affected (0.001 sec)

使用 localhost 登录

  1.  
    [mysql@mysql-test-83 ~]$ /usr/local/mariadb/bin/mysql -utest_user -p -hlocalhost
  2.  
    Enter password:
  3.  
    ERROR 1045 (28000): Access denied for user 'test_user'@'localhost' (using password: YES)

使用 IP 登录

  1.  
    [mysql@mysql-test-83 ~]$ /usr/local/mariadb/bin/mysql -utest_user -p -h127.0.0.1
  2.  
    Enter password:
  3.  
    Welcome to the MariaDB monitor. Commands end with ; or \g.
  4.  
    Your MariaDB connection id is 12
  5.  
    Server version: 10.3.11-MariaDB-log MariaDB Server
  6.  
    ========= 省略 ===========
  7.  
     
  8.  
    MariaDB [(none)]> status
  9.  
    --------------
  10.  
    /usr/local/mariadb/bin/mysql Ver 15.1 Distrib 10.3.11-MariaDB, for Linux (x86_64) using readline 5.1
  11.  
     
  12.  
    Connection id: 12
  13.  
    Current database:
  14.  
    Current user: test_user@127.0.0.1
  15.  
    SSL: Not in use
  16.  
    Current pager: stdout
  17.  
    Using outfile: ''
  18.  
    Using delimiter: ;
  19.  
    Server: MariaDB
  20.  
    Server version: 10.3.11-MariaDB-log MariaDB Server
  21.  
    Protocol version: 10
  22.  
    Connection: 127.0.0.1 via TCP/IP

结果显示MariaDB 10.3%不包括localhost

4 结论

版本用户中的%是否包括localhost
MySQL8.0 包括
MySQL5.7 包括
MySQL5.6 不包括
MySQL5.1 不包括
MariaDB 10.3 不包括
posted on 2020-07-03 15:55  bluestones  阅读(71)  评论(0)    收藏  举报