我正在尝试创建一个 MySql 存储函数,该函数将返回当前连接用户的用户名。当我以用户“x”连接到数据库时,它仍然返回用户名“root”。
为什么会这样以及如何让它从函数返回用户名“x”。
CREATE DEFINER=`root`@`localhost` FUNCTION `GetUserName`() RETURNS char(255) CHARSET utf8
BEGIN
RETURN cast( SUBSTRING_INDEX(CURRENT_USER(),'@',1) as char(255) );
END
最佳答案
结果有两个选项,SQL SECURITY INVOKER 和 SQL SECURITY DEFINER 描述 here 切换到 SQL SECURITY INVOKER 修复了它。
CREATE DEFINER=`root`@`localhost` FUNCTION `GetUserName`() RETURNS char(255) CHARSET utf8
SQL SECURITY INVOKER
BEGIN
RETURN cast( SUBSTRING_INDEX(CURRENT_USER(),'@',1) as char(255) );
END
关于MySQL 函数用户上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27212141/