0
MySQLのストアドプロシージャを使用してユーザーのパスワードを変更したいとします。ここでMySQL - ストアドプロシージャでユーザーパスワードを設定する
が作成コードです:ここまで
CREATE SCHEMA `try` ;
USE try;
CREATE TABLE `users` (
`username` VARCHAR(100) NOT NULL,
`password` VARCHAR(100) NOT NULL,
PRIMARY KEY(`username`));
insert into users values('Admin','pass');
create user 'usertry'@'localhost' identified by 'pass';
grant select on try.* to 'usertry'@'localhost';
grant insert on try.* to 'usertry'@'localhost';
grant update on try.* to 'usertry'@'localhost';
grant delete on try.* to 'usertry'@'localhost';
、すべてが良いです。 それから、テーブル "users"を変更するストアドプロシージャを作成しました。
DELIMITER $$
CREATE PROCEDURE `changeusers` (
IN user VARCHAR(255),
IN pass VARCHAR(255),
IN newuser VARCHAR(255),
IN newpass VARCHAR(255),
OUT result bool)
BEGIN
if(user= Binary (Select username from users limit 1)
and pass= Binary (Select password from users limit 1))
then
delete from users where username=user;
insert into users values(newuser,newpass);
set result=true;
else
set result=false;
end if;
select result;
END $$ DELIMITER ;
私がストアドプロシージャを呼び出すと、正常に動作します。
call changeusers('Admin','pass','Admin','new',@result);
call changeusers('Admin','pass','Admin','new',@result) 1 row(s) returned 0.141 sec/0.000 sec
次に、ユーザーのパスワードをユーザーテーブルのパスワードと同じに設定するようにストアドプロシージャを変更しようとしました。
DELIMITER $$
CREATE PROCEDURE `changeusers` (
IN user VARCHAR(255),
IN pass VARCHAR(255),
IN newuser VARCHAR(255),
IN newpass VARCHAR(255),
OUT result bool)
BEGIN
if(user= Binary (Select username from users limit 1)
and pass= Binary (Select password from users limit 1))
then
delete from users where username=user;
insert into users values(newuser,newpass);
/*The added line*/
set password for 'usertry'@'localhost' = newpass;
/*The added line*/
set result=true;
else
set result=false;
end if;
select result;
END $$ DELIMITER ;
が、私はこれを得た新しいスクリプトを実行する場合:
Error Code: 1064. You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near
'newpass;
set result=true;
else
set result=false;'
at line 13 0.000 sec
私はどんなsugestionsをapreciateだろうし。おかげさまで @Barmarへ
EDIT
感謝。私は自分が望むことをすることができました。 ここに新しいストアドプロシージャがあります。
DELIMITER $$
CREATE PROCEDURE `changeusers` (
IN user VARCHAR(255),
IN pass VARCHAR(255),
IN newuser VARCHAR(255),
IN newpass VARCHAR(255),
OUT result bool)
BEGIN
if(user= Binary (Select username from users limit 1)
and pass= Binary (Select password from users limit 1))
then
delete from users where username=user;
insert into users values(newuser,newpass);
/*The added line*/
set @stm = CONCAT("set password for 'usertry'@'localhost' = ",newpass);
prepare stmt from @stm;
execute stmt;
deallocate prepare stmt;
/*The added line*/
set result=true;
else
set result=false;
end if;
select result;
END $$ DELIMITER ;
ありがとうございました。
'SET PASSWORD'の代わりに' ALTER USER'文を使ってみてください。 – Barmar
@Barmar 'ALTER USER'を使ってみましたが、それでも同じ問題があります。 – Lluxed