如何编写存储过程来检查MySql中的Grant?

时间:2016-05-03 06:27:57

标签: mysql stored-procedures

我想创建一个存储过程来检查grant。我试过以下方式,但我不知道我在这里缺少什么。

//simple Query "SHOW GRANTS FOR testuser @'192.168.1.180'"  - It is working

CREATE DEFINER=`abc`@`localhost` PROCEDURE `SP_GetGrantAllPriviledge`(
IN Username TEXT,
IN Hostname TEXT
)
BEGIN
   SHOW GRANTS FOR Username @Hostname; //doesn't work
END

有人能说出我错过的东西吗?

2 个答案:

答案 0 :(得分:1)

您可以使用INFORMATION_SCHEMA中的TABLE_PRIVILEGES。

SELECT *
FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES
WHERE `GRANTEE` = CONCAT('''', Username, '''@''', Hostname, '''')

答案 1 :(得分:0)

@Hostname; is the source of issue

使用准备声明更新您的SP:

CREATE PROCEDURE `SP_GetGrantAllPriviledge`(
IN Username TEXT,
IN Hostname TEXT
)
BEGIN

   SET @sql = CONCAT('SHOW GRANTS FOR ',Username,' @',Hostname,'; ');
        PREPARE stmt FROM @sql;
        EXECUTE stmt;
END