我不知道如何解决它:
drop trigger if exists insertusuario;
CREATE TRIGGER insertusuario
BEFORE INSERT ON usuario
FOR EACH ROW
begin
GRANT ALL ON *.* TO ',new.nombre,'@'%' IDENTIFIED BY ',new.contraseña,' WITH GRANT OPTION;
end;
答案 0 :(得分:1)
更改Grant
命令语句准备,如下所示:
SELECT
CONCAT( 'GRANT ALL ON *.* TO ''',
new.nombre,
'''@''%'' IDENTIFIED BY ''',
new.contraseña,
''' WITH GRANT OPTION'
) INTO @temp_grant_sql_string;
使用预准备语句执行此生成的grant语句;
PREPARE stmt FROM @temp_grant_sql_string;
EXECUTE stmt;
deallocate prepare stmt; -- or drop prepare stmt;
在注册存储过程之前,我希望您了解delimiter
部分。
在触发器定义之前使用:delimiter $$
。而且,
在触发器定义后使用:delimiter ;
,重置为默认值。
最后,你的触发器应该是这样的:
delimiter $$;
drop trigger if exists insertusuario
$$
CREATE TRIGGER insertusuario BEFORE INSERT ON usuario
FOR EACH ROW BEGIN
SELECT
CONCAT( 'GRANT ALL ON *.* TO ''',
new.nombre,
'''@''%'' IDENTIFIED BY ''',
new.contraseña,
''' WITH GRANT OPTION'
) INTO @temp_grant_sql_string;
PREPARE stmt FROM @temp_grant_sql_string;
EXECUTE stmt;
DEALLOCATE PREPARE stmt; -- or DROP PREPARE stmt;
END;
$$
delimiter ;