您可以通過創建一個數據庫API周圍使用本作品。 SQL代碼應該可以幫到你。
CREATE TABLE mysql.`created_users` (
`user_name` varchar(255) DEFAULT NULL,
`owner` varchar(255) DEFAULT NULL
)
該表保存用戶名和用戶創建它們。 注意使用您的root帳戶創建過程
創建mysql用戶的過程。
DROP PROCEDURE IF EXISTS mysql.createUser;
DELIMITER //
CREATE PROCEDURE mysql.createUser(IN userName VARCHAR(255), IN userPassword VARCHAR(255))
BEGIN
SET @createUserQuery = CONCAT('
CREATE USER "',userName,'"@"localhost" IDENTIFIED BY "',userPassword,'" '
);
PREPARE stmt FROM @createUserQuery;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @createcreatedUserQuery = CONCAT('
INSERT INTO mysql.created_users (user_name, owner) VALUE("',userName,'", "',USER(),'")'
);
PREPARE stmt FROM @createcreatedUserQuery;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
程序丟棄並檢查created_users表以確保用戶存在並刪除權限檢查。
DROP PROCEDURE IF EXISTS mysql.dropUser;
DELIMITER //
CREATE PROCEDURE mysql.dropUser(IN userName VARCHAR(255))
BEGIN
SET @canDeleteUser = 0;
SET @createCountUserQuery = CONCAT('
SELECT COUNT(*) FROM mysql.created_users WHERE user_name = "',userName,'" AND owner = "',USER(),'" INTO @canDeleteUser'
);
PREPARE stmt FROM @createCountUserQuery;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
IF @canDeleteUser = 0 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'The user is not known on the server or you dont have rights to delete this user';
END IF;
IF @canDeleteUser = 1 THEN
SET @createDropUserQuery = CONCAT('
DROP USER "',userName,'"@"localhost"'
);
PREPARE stmt FROM @createDropUserQuery;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @createDeleteUserQuery = CONCAT('
DELETE FROM created_users WHERE user_name = "',userName,'" AND owner = "',USER(),'"'
);
PREPARE stmt FROM @createDeleteUserQuery;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END IF;
END //
DELIMITER ;
並賦予權利執行這些
GRANT EXECUTE ON PROCEDURE mysql.createUser TO '[user]'@'localhost';
GRANT EXECUTE ON PROCEDURE mysql.dropUser TO '[user]'@'localhost';
而且你可能想給用戶選擇上mysql.proc的私法這樣他們就可以看到後面的程序源代碼,並知道參數
您可以像這樣使用數據庫API。
CALL mysql.createUser('user', 'password');
CALL mysql.dropUser('user');
需要注意的是root帳戶只能刪除用戶有業主根@本地
這可能會幫助你。 https://dev.mysql.com/doc/refman/5.1/en/grant.html –
我知道「CREATE USER」是一個全局特權。實際上,我們正在像AWS的RDS一樣實施Mysql作爲服務。我們將創建一個超級用戶,供系統管理人員使用。我們的客戶將擁有擁有大部分權限的其他用戶,包括「創建用戶」,以便他們可以自行管理帳戶。我想找到一種除了Mysql普通特權以外的方法來獲取它。 – user3752700
如果您有AWS RDS,您會發現RDS具有'rdsadmin'用戶帳戶。如果你運行'DROP USER'rdsadmin'@'localhost'',你會得到一個錯誤:'ERROR 1396(HY000):DROP USER操作'rdsadmin'@'localhost''操作失敗。我很好奇如何實現這一點。 – user3752700