我想创建一个存储过程来检查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
有人能说出我错过的东西吗?
答案 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