( 「存在しない場合にユーザーを作成する」をエミュレートする場合の構文エラーとは関連していますが、これとは別のものです。)
MySQLで一般的/動的にユーザーを追加する (つまりsp_adduser
、他の DBMS に含まれるシステム プロシージャをエミュレートする) 機能を実現することは可能ですか?
if [not] exists
MySQL は次の構文をサポートしていません。 http://bugs.mysql.com/bug.php?id=15287を参照してください。
create user if not exists 'foo'@'%' identified by password 'bar';
これもサポートしていません:
drop procedure if exists create_user_if_not_exists;
delimiter ||
create procedure create_user_if_not_exists
( sUser varchar(60),
sHost varchar(16),
sPassword varchar(255) )
begin
-- ensure user does not yet exist
if (select ifnull((select 1
from mysql.user
where User = sUser
and Host = sHost), 0) = 0) then
set @createUserText = concat('create user ''', sUser, '''@''', sHost, ''' identified by ''', sPassword, ''';');
prepare createUserStatement FROM @createUserText;
execute createUserStatement;
deallocate prepare createUserStatement;
end if;
end ||
delimiter ;
上記の手順を呼び出そうとすると:
call create_user_if_not_exists ( 'foo', '%', 'bar' );
あなたは素敵なメッセージを受け取ります:
This command is not supported in the prepared statement protocol yet
以下は機能しますが、明らかに特に再利用可能ではありません。
drop procedure if exists create_user_if_not_exists;
delimiter ||
create procedure create_user_if_not_exists
( )
begin
if (select ifnull((select 1
from mysql.user
where User = 'foo'
and Host = '%'), 0) = 0) then
create user 'foo'@'%' identified by password 'bar';
end if;
end ||
delimiter ;