我在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%";