Как генерировать / динамически создавать / удалять пользователей

0

(Связано с, но отдельно от Синтаксическая ошибка с эмуляцией "создать пользователя, если не существует" .

Возможно ли реализовать функциональность общего/динамического добавления пользователя (то есть эмуляции системной процедуры sp_adduser, включенной в другие СУБД) в MySQL?

MySQL не поддерживает следующий синтаксис if [not] exists, см. 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 ;
Теги:
database
missing-features

1 ответ

0
Лучший ответ

О, извините, я только что помахал, вы говорите о пользователях db. а не для пользователей приложений.

Вам может потребоваться инструкция INSERT INTO ...... ON DUPLICATE KEY UPDATE ......=VALUE(.....).

Я использую это в моем общем методе объектов сохранения, используя это, мне не нужно заботиться о том, существует ли пользователь или нет, он будет там (и обновлен) после того, как я совершу.

  • 0
    Да, это то, что я закончил. Не чувствует себя особенно чистым, хотя ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню