【问题标题】:Mysql drop user with grants for multiple hosts授予多个主机的 Mysql 删除用户
【发布时间】:2014-04-10 15:30:45
【问题描述】:

我向我的 mysql-db 添加了一个用户,并授予从多个主机访问的权限,例如:

GRANT ALL PRIVILEGES ON `db`.* TO 'dbuser'@'host1';
GRANT ALL PRIVILEGES ON `db`.* TO 'dbuser'@'host2';
GRANT ALL PRIVILEGES ON `db`.* TO 'dbuser'@'host3';
GRANT ALL PRIVILEGES ON `db`.* TO 'dbuser'@'host4';
....

完全删除用户的最短方法是什么?我试过了:

drop user 'dbuser'@'%';
ERROR 1396 (HY000): Operation DROP USER failed for 'dbuser'@'%'

drop user 'dbuser';
ERROR 1396 (HY000): Operation DROP USER failed for 'dbuser'@'%'

show grants for 'dbuser';
ERROR 1141 (42000): There is no such grant defined for user 'dbuser' on host '%'

我想,% wouzld 会被视为通配符。 Butr 似乎唯一的方法是删除每个主机的用户,例如:

drop user 'dbuser'@'host1';
drop user 'dbuser'@'host2';
drop user 'dbuser'@'host3';
...

没有更方便的删除用户的方法吗?

【问题讨论】:

  • 我不知道有一个命令可以执行您想要的操作,但这会生成单独的语句:select concat('drop user \'', user, '\'@\'' , host, '\';') as drop_statement from mysql.user where user = 'username';

标签: mysql grant


【解决方案1】:
SELECT GROUP_CONCAT('\'',user, '\'@\'', host, '\'') INTO @users FROM mysql.user WHERE user = 'root';
SET @users = CONCAT('DROP USER ', @users);
PREPARE stmt FROM @users;
EXECUTE stmt;

【讨论】:

  • 虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的回答添加解释并说明适用的限制和假设。
  • 非常感谢。我有一个用户的主机格式错误,其中包括换行符、% 和 ;。我不知道我将如何以正确的方式逃避 mysql 识别它。
  • 这个答案可能来自stackoverflow.com/a/11925999/5113030
【解决方案2】:

MySQL

select user,host,password from mysql.user;

MySQL >=5.7.x

select user,host,authentication_string from mysql.user;

以上内容您需要创建一个回滚计划,相信我,如果删除大量用户并且您想节省时间,您将始终需要一个。

现在回答你的问题:

select concat("DROP USER ","'",user,"'@'",host,"';") from mysql.user where host like "127.0.%" or host like "192.168%";

根据您的平台,探索如何将输出粘贴到文件中并执行它

【讨论】:

  • 这里有一些对我有用的东西,不需要(临时)文件echo 'select concat("DROP USER ",user,"@\"",host,"\";") from mysql.user where User = "alex"' | mysql -uroot -N | mysql -uroot
【解决方案3】:

如果您使用的是 MySQL >= 5.0.2,您可以按如下方式删除帐户及其权限:

DROP USER 用户;

该语句从所有授权表中删除该帐户的权限行。

(来自:https://dev.mysql.com/doc/refman/5.0/en/drop-user.html

【讨论】:

  • 虽然正确,但这不是问题的答案。从您链接到的页面:“如果您仅指定帐户名的用户名部分,则使用 '%' 的主机名部分。”问题是如何删除所有同名但主机部分不同的用户。
猜你喜欢
  • 2021-02-12
  • 2020-12-28
  • 2023-03-28
  • 1970-01-01
  • 2011-03-13
  • 1970-01-01
  • 2019-01-22
  • 2020-10-23
  • 1970-01-01
相关资源
最近更新 更多