我在 MySQL 5.6 中创建了一个用户,该用户的用户名中不知为何包含不可打印的字符。我该如何删除该用户?
mysql> select user,host from mysql.user where user like 'wiki%';
+-----------------+------+
| user | host |
+-----------------+------+
| wiki4thech@rch
| % |
+-----------------+------+
1 row in set (0.00 sec)
嗯,这看起来不太好。让我们添加一个前缀和后缀,以便我们可以看到 MySQL 是否在输出中添加了任何填充:
# mysql -E --disable-column-names -u root -p mysql --execute "select concat('START',user,'END') from user where user like 'wiki%'"
Enter password:
*************************** 1. row ***************************
STARTwiki4thech@rch
END
它看起来像一个换行符,但为了确保万无一失:
# mysql -E --disable-column-names -u root -p mysql --execute \
"select concat('START',user,'END') from user where user like 'wiki%'" | od -t x1c
Enter password:
0000000 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a
* * * * * * * * * * * * * * * *
0000020 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 31 2e 20 72
* * * * * * * * * * * 1 . r
0000040 6f 77 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a
o w * * * * * * * * * * * * *
0000060 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 53
* * * * * * * * * * * * * * \n S
0000100 54 41 52 54 77 69 6b 69 34 74 68 65 63 68 40 72
T A R T w i k i 4 t h e c h @ r
0000120 63 68 0a 45 4e 44 0a
c h \n E N D \n
0000127
好的,所以这肯定是一个换行符。尝试一下显而易见的方法:
mysql> drop user 'wiki4thech@rch\n'@'%';
ERROR 1396 (HY000): Operation DROP USER failed for 'wiki4thech@rch'@'%'
稍微不那么明显:
mysql> drop user 'wiki4thech@rch
'> '@'%';
ERROR 1396 (HY000): Operation DROP USER failed for 'wiki4thech@rch'@'%'
我懂了另一个问题或者二这表明在类似情况下直接编辑用户表,但不清楚这是否真的是个好主意(即它会导致什么副作用,或者弄乱系统表的风险有多大?)。
或者,有没有一种安全的方法来做到这一点DROP USER
?
答案1
如果你直接编辑mysql.user表,则不会有任何副作用,但有一个例外:你必须发出一个
FLUSH PRIVILEGES;
完成后的命令(重新读取权限表并将更改联机)因此,最简单的方法是从 mysql 用户中删除条目本身,例如
DELETE FROM mysql.user WHERE user ='wiki%';
如果没有其他用户的名字以 wiki 开头(如前所述),则尝试查找另一个可选值,如密码等。如果有更多用户具有相似的名称,那么不用担心,您可以删除所有用户,然后重新创建将要使用的用户(因为更改只会在您刷新该权限后发生 - 正如我之前所说的那样。)如果您想快速进行用户重建,您应该先安装 Percona 工具包,使用以下命令转储所有用户
pt-show-grants > users.sql
并从该转储中重新加载所需的用户。
希望能帮助到你。
答案2
这个怎么样?
DELETE FROM mysql.user where user like "wiki4te%" and host like "rch%";
答案3
尝试这个:
使用mysql;
从 mysql 中删除用户 =“wiki%”;
刷新权限;
编辑:假设没有其他 mysql 用户的用户名以“wiki”开头