【问题标题】:Delete all users in MySQL with specific name删除 MySQL 中具有特定名称的所有用户
【发布时间】:2012-08-12 21:07:08
【问题描述】:

我想从我的 MySQL 数据库中删除所有具有指定名称的用户,而不管主机参数如何。这是我写的:

DELIMITER ;;

## CREATING SCHEMA
DROP SCHEMA IF EXISTS rms;;
CREATE SCHEMA rms;;

USE rms;;

## DROP USER
DROP PROCEDURE IF EXISTS PREPARE_USERS;;
CREATE PROCEDURE PREPARE_USERS()
BEGIN
    DECLARE V_RECORD_NOT_FOUND INTEGER DEFAULT 0; 
    DECLARE V_USER_HOST CHAR(60);
    DECLARE C_HOSTS_CURSOR CURSOR FOR
        SELECT host FROM mysql.user WHERE user='rms';
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET V_RECORD_NOT_FOUND = 0;

    OPEN C_HOSTS_CURSOR;

    READ_LOOP: LOOP
        FETCH C_HOSTS_CURSOR INTO V_USER_HOST;
        IF V_RECORD_NOT_FOUND != 0 THEN
            LEAVE READ_LOOP;
        END IF;

        SET @V_EXEC=CONCAT(CONCAT('DROP USER \'rms\'@\'',V_USER_HOST),'\';;');
        PREPARE V_STMT FROM @V_EXEC;
        EXECUTE V_STMT;
        DEALLOCATE PREPARE V_STMT;
    END LOOP;

    CLOSE C_HOSTS_CURSOR;

    FLUSH PRIVILEGES;

    CREATE USER 'rms'@'127.0.0.1' IDENTIFIED BY 'rms123';
    GRANT ALL ON rms.* TO 'rms'@'127.0.0.1'
    WITH MAX_USER_CONNECTIONS  250;
END;;

CALL PREPARE_USERS();;

DROP PROCEDURE IF EXISTS PREPARE_USERS;;

DELIMITER ;

但它给了我错误,我不知道为什么:/当没有用户名为“rms”时,它甚至不会运行,但如果有的话,MySQL 声称它们不能被删除即使他们是。

【问题讨论】:

  • 你为什么要搞得这么复杂——一个简单的 DELETE FROM table WHERE username LIKE '%foo%';
  • 据我所知,您不应该直接从 mysql.user 中删除,对吗?
  • 你在哪里看到的?是的,您需要在之后刷新特权,但据我所知,没有任何说法。
  • @cichy202 如果您有修改此表的权限,您可以删除mysql.user 表中的记录。

标签: mysql


【解决方案1】:

好的,我有答案了:

SET @users = NULL;
SELECT GROUP_CONCAT('\'',user, '\'@\'', host, '\'') INTO @users FROM mysql.user WHERE user = 'rms';

SET @users = CONCAT('DROP USER ', @users);
PREPARE stmt1 FROM @users;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

【讨论】:

    猜你喜欢
    • 2020-06-10
    • 2015-11-28
    • 2019-04-14
    • 2018-03-20
    • 2021-06-06
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多