删除 MySQL 中具有特定名称的所有用户 [英] Delete all users in MySQL with specific name

查看:39
本文介绍了删除 MySQL 中具有特定名称的所有用户的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

无论主机参数如何,我都想从我的 MySQL 数据库中删除具有指定名称的所有用户.这是我写的:

I want to delete all users from my MySQL database with specified name regardless to the host parameter. Here is what I wrote:

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声称它们不能被删除即使他们是.

But it gives me errors and I don't know why :/ When there are no users with 'rms' name, it won't even run, but if there are any, MySQL claims that they can't be dropped even though they are.

推荐答案

好的,我有答案了:

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;

这篇关于删除 MySQL 中具有特定名称的所有用户的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆