如何删除用户名包含不可打印字符的MySQL用户?

我在MySQL 5.6中有一个用户,在用户名中用一个不可打印的字符创build。 我怎样才能放弃这个用户?

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 ow * * * * * * * * * * * * * 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 TART wiki 4 thech @ r 0000120 63 68 0a 45 4e 44 0a ch \n END \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'@'%' 

我看到另外一个或两个build议直接在类似的情况下编辑用户表,但是不清楚这是否是一个好主意(例如,它可能导致什么副作用,或者如何冒险地混淆系统表)? 。

另外,是否有一个安全的方法来做到这一点与DROP USER

如果你直接编辑mysql.user表,没有副作用,除了一个:你必须发出一个

 FLUSH PRIVILEGES; 

命令完成后(重新读取权限表并将您的更改联机)所以最简单的方法是如果您从mysql用户删除条目本身

 DELETE FROM mysql.user WHERE user ='wiki%'; 

如果没有其他用户名称以wiki开头(如前所述)如果是,试着find另一个可选的valuse,如密码等。如果有更多的用户具有相似的名称,那么不要担心,你可以把它们全部删除,并重新创build将被使用的那些(因为只有在你清除特权之后才会进行更改 – 就像我之前说过的那样)。如果你想快速完成用户rest,你应该安装Percona工具箱,转储所有的用户

  pt-show-grants > users.sql 

并从该转储重新加载所需的用户。

希望能帮助到你。

尝试这个:

使用mysql;

从MySQL删除其中user =“wiki%”;

冲洗特权;

编辑:这里假定没有其他的用户名以“wiki”开头的mysql用户

这个怎么样?

 DELETE FROM mysql.user where user like "wiki4te%" and host like "rch%";