अपडेट:
MySQL 5.7 के अनुसार आप DROP USER IF EXISTS
स्टेटमेंट का उपयोग कर सकते हैं । Ref: https://dev.mysql.com/doc/refman/5.7/en/drop-user.html
वाक्य - विन्यास: DROP USER [IF EXISTS] user [, user] ...
उदाहरण: DROP USER IF EXISTS 'jeffrey'@'localhost';
FYI करें (और MySQL के पुराने संस्करण के लिए), यह एक बेहतर उपाय है ... !!!
निम्नलिखित SP आपको 'tempuser'@'%'
निष्पादित करके उपयोगकर्ता को निकालने में मदद करेगाCALL DropUserIfExistsAdvanced('tempuser', '%');
यदि आप नाम वाले सभी उपयोगकर्ताओं 'tempuser'
(कहना 'tempuser'@'%'
, 'tempuser'@'localhost'
और 'tempuser'@'192.168.1.101'
) CALL DropUserIfExistsAdvanced('tempuser', NULL);
को हटाना चाहते हैं तो SP को क्रियान्वित करें जैसे यह नाम वाले सभी उपयोगकर्ताओं को हटा देगा tempuser
!!! गंभीरता से ...
अब उल्लेख एसपी पर एक नजर है DropUserIfExistsAdvanced
:
DELIMITER $$
DROP PROCEDURE IF EXISTS `DropUserIfExistsAdvanced`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `DropUserIfExistsAdvanced`(
MyUserName VARCHAR(100)
, MyHostName VARCHAR(100)
)
BEGIN
DECLARE pDone INT DEFAULT 0;
DECLARE mUser VARCHAR(100);
DECLARE mHost VARCHAR(100);
DECLARE recUserCursor CURSOR FOR
SELECT `User`, `Host` FROM `mysql`.`user` WHERE `User` = MyUserName;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET pDone = 1;
IF (MyHostName IS NOT NULL) THEN
IF (EXISTS(SELECT NULL FROM `mysql`.`user` WHERE `User` = MyUserName AND `Host` = MyHostName)) THEN
SET @SQL = (SELECT mResult FROM (SELECT GROUP_CONCAT("DROP USER ", "'", MyUserName, "'@'", MyHostName, "'") AS mResult) AS Q LIMIT 1);
PREPARE STMT FROM @SQL;
EXECUTE STMT;
DEALLOCATE PREPARE STMT;
END IF;
ELSE
OPEN recUserCursor;
REPEAT
FETCH recUserCursor INTO mUser, mHost;
IF NOT pDone THEN
SET @SQL = (SELECT mResult FROM (SELECT GROUP_CONCAT("DROP USER ", "'", mUser, "'@'", mHost, "'") AS mResult) AS Q LIMIT 1);
PREPARE STMT FROM @SQL;
EXECUTE STMT;
DEALLOCATE PREPARE STMT;
END IF;
UNTIL pDone END REPEAT;
END IF;
FLUSH PRIVILEGES;
END$$
DELIMITER ;
उपयोग:
CALL DropUserIfExistsAdvanced('tempuser', '%');
उपयोगकर्ता को हटाने के लिए 'tempuser'@'%'
CALL DropUserIfExistsAdvanced('tempuser', '192.168.1.101');
उपयोगकर्ता को हटाने के लिए 'tempuser'@'192.168.1.101'
CALL DropUserIfExistsAdvanced('tempuser', NULL);
नाम वाले सभी उपयोगकर्ताओं को हटाने के लिए 'tempuser'
(जैसे, कहते हैं 'tempuser'@'%'
, 'tempuser'@'localhost'
और 'tempuser'@'192.168.1.101'
)