我以前在 MySQL 中访问 root 用户就好了。但最近,我再也不能了。
我可以正常登录:
mysql -u root -p
Run Code Online (Sandbox Code Playgroud)
这是登录后的mysql状态:
mysql> status
--------------
mysql Ver 14.14 Distrib 5.5.28, for debian-linux-gnu (i686) using readline 6.2
Connection id: 37
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.5.28-0ubuntu0.12.04.3 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 4 min 16 sec
Threads: 1 …Run Code Online (Sandbox Code Playgroud) 我试图从我的 mysql.users 数据库中删除匿名用户。但是,我一直有奇怪的行为。当我输入命令时:
DROP User ''@'WOPR';
Run Code Online (Sandbox Code Playgroud)
我收到一条通用错误消息。所以,我重新启动了我的机器,并再次尝试。这次我得到了回应
Query OK, 0 rows affected.
Run Code Online (Sandbox Code Playgroud)
但是当我投入
SELECT User, Host, Password FROM mysql.user WHERE User='';
回报是:
+------+------+----------+
| User | Host | Password |
+------+------+----------+
| | WOPR | |
+------+------+----------+
Run Code Online (Sandbox Code Playgroud)
(WOPR 是我的主机名)
我运行命令
DROP User ''@'WOPR';
并得到相同的结果。
我正在 Arch Linux 内核版本 2.6.33 上运行全新安装的 MySQL 5.5。
有谁知道什么会导致这种行为?
与我的MySQL 问题相关
我在 mysql.user 中有一个具有 USAGE 权限的用户,但在 mysql.db 中该用户具有选择、插入、更新、删除。这样用户就可以成功查询数据库。
我找不到有关此 mysql.db 如何工作的任何信息,是否类似于某种缓存权限?mysqld 重启会刷新它吗?
mysql> show grants for user@'xx.xx.xx.%';
+-------------------------------------------------------------------------------------------------------------------------------+
| Grants for user@xx.xx.xx.% |
+-------------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user'@'xx.xx.xx.%' IDENTIFIED BY PASSWORD 'xxx' REQUIRE SSL |
mysql> select host,db,user, select_priv,update_priv,delete_priv from
mysql.db where user='user';
| host | db | user | select_priv | update_priv | delete_priv |
| xx.xx.xx.1 | myDB | user | Y | Y | Y
Run Code Online (Sandbox Code Playgroud) 我在运行MySQLTuner.pl时看到这些:
-------- Security Recommendations -------------------------------------------
[!!] User '@debian' has no password set.
[!!] User '@localhost' has no password set.
------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
谢谢
我有一个 mysql 用户(我将称之为)“user5”,他在“show grants”的输出中只有“grant usage”(即没有特权),但仍然可以对数据库“app_db”进行选择(这就是我想要,但我确实理解它是如何拥有这种特权的)。没有匿名用户。user5 如何通过这种配置使用其数据库?
以 user5 登录时:
mysql> show grants;
+--------------------------------------------------------------------------------------------------------------+
| Grants for user5@10.14.% |
+--------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user5'@'10.14.%' IDENTIFIED BY PASSWORD '*long hash' |
+--------------------------------------------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
以 root 身份登录时,查看 User 表:
mysql> select User, Host, Select_priv from mysql.user;
+----------+---------------+-------------+
| User | Host | Select_priv |
+----------+---------------+-------------+
| root | localhost | Y |
| root | 127.0.0.1 | Y |
| root | 10.14.12.8 | Y |
| user5 | 10.14.% | …Run Code Online (Sandbox Code Playgroud)