在存储过程中重命名用户

时间:2019-04-29 21:20:05

标签: mysql stored-procedures

我正在尝试创建一个存储过程来重命名MySQL数据库中的用户:

CREATE DEFINER=`admin`@`%` PROCEDURE `renamedbuser`(
  IN _oldname VARCHAR(200),
  IN _newname VARCHAR(200)
)
BEGIN
  IF (SELECT COUNT(User) FROM mysql.user WHERE User = _oldname) > 0 THEN
  BEGIN
    RENAME USER _oldname TO _newname;
  END;
  END IF;
END

运行此过程时,出现以下错误:

MySql.Data.MySqlClient.MySqlException (0x80004005): Operation RENAME USER failed for '_oldname'@'%'

在我看来,执行RENAME USER行时,它使用变量_oldname的 name 作为原始用户名,而不是变量包含的 value

如果我执行类似的操作

RENAME USER 'test' TO 'testing';

如果可以正常运行,请重命名'test'@'%'用户。

我打给RENAME USER的电话不正确吗?当从存储过程中调用该语句时,它是否不能以这种方式工作?有什么方法可以实现我想要的行为?

1 个答案:

答案 0 :(得分:0)

account names的文档中说:

  

如果用户名和主机名是合法的,则无需用引号引起来。

我想这要优先于存储过程变量。它还说:

  

使用反引号(`),单引号(')或双引号(“)将用户名和主机名引用为标识符或字符串。

您可以尝试使用反引号,例如:

RENAME USER `_oldname` TO `_newname`;