Есть пара неправильных вещей.
1) В фигурную кавычку и двойные кавычки "умных кавычек" вместо кавычек ASCII и двойных кавычек
2) включается содержимоепараметра или переменной процедуры в тексте оператора SQL нам нужно будет использовать динамический SQL PREPARE / EXECUTE / DEALLOCATE
Нам также необходимо убедиться, что переданный параметр является допустимым;оператор GRANT
создаст пользователя без пароля, если пользователь не существует.И если параметр содержит символ одинарной кавычки, это сломает наш SQL, если мы не избежим его.Мы также могли бы рассмотреть возможность использования функции TRIM () для удаления любых начальных или конечных пробелов из параметра.
Примерно так:
DELIMITER $$
CREATE PROCEDURE GrantUserAccess(IN as_username CHAR(25))
BEGIN
SET @sql = CONCAT('GRANT ALL ON databaseNameHere.* TO '''
,REPLACE(as_username,'''','''''')
,'''@''%''' );
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @sql = '';
END$$
DELIMITER ;