Переименовать пользователя в хранимой процедуре - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь создать хранимую процедуру для переименования пользователей в моей базе данных 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 в качестве исходного имени пользователя используется name переменной _oldname, а не значение , которое содержит переменная.

Если я выполню что-то вроде

RENAME USER 'test' TO 'testing';

Если работает так, как я ожидал, переименуйте пользователя 'test' @ '%'.

Я неправильно называю RENAME USER? Разве этот оператор просто не работает таким образом, когда вызывается из хранимой процедуры? Есть ли способ добиться поведения, которое я ищу?

1 Ответ

0 голосов
/ 30 апреля 2019

В документации имена учетных записей говорится:

Имя пользователя и имя хоста не должны указываться в кавычках, если они допустимы как идентификаторы без кавычек.

Я полагаю, это имеет приоритет над переменными вашей хранимой процедуры.В нем также говорится:

Кавычки имен пользователей и имен хостов в качестве идентификаторов или в виде строк с использованием обратных кавычек (`), одинарных кавычек (') или двойных кавычек (").

Вы можете попробовать сделать это с помощью галочек, например:

RENAME USER `_oldname` TO `_newname`;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...