powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Создание пользователя в хранимой процедуре
19 сообщений из 19, страница 1 из 1
Создание пользователя в хранимой процедуре
    #39246715
Даниил Пакоv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз о наболевшем. Так как в принципе ссоздать нового пользователя в хранимой процедуре с правами только на запуск ХП??? Может кто нить подскажет:?
...
Рейтинг: 0 / 0
Создание пользователя в хранимой процедуре
    #39246725
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даниил Пакоv,

Команды CREATE USER и GRANT не запрещены к использованию в хранимых процедурах. Как напрямую, так и через prepared statements.
...
Рейтинг: 0 / 0
Создание пользователя в хранимой процедуре
    #39246726
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В чём возникла проблема?
В создании ХП? http://dev.mysql.com/doc/refman/5.7/en/create-procedure.html
В создании пользователя? http://dev.mysql.com/doc/refman/5.7/en/create-user.html
В задании прав пользователя? http://dev.mysql.com/doc/refman/5.7/en/grant.html
В указании набора прав? http://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html#priv_execute
...
Рейтинг: 0 / 0
Создание пользователя в хранимой процедуре
    #39246763
Даниил Пакоv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В тот то и дело , что внутри ХП эти команды не работают(
...
Рейтинг: 0 / 0
Создание пользователя в хранимой процедуре
    #39246917
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даниил Пакоvвнутри ХП эти команды не работают
Неправда. Работают.
Команда либо исполняется, либо не исполняется по причине какой-либо ошибки (о чём непременно сообщается).
А если команда не делает того, что ты от неё ожидаешь - так это не она косячит. Она просто не умеет такого. Это ты в чём-то косячишь...
...
Рейтинг: 0 / 0
Создание пользователя в хранимой процедуре
    #39247124
Даниил Пакоv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PROCEDURE mysql.CreateMyUsr()
BEGIN

CREATE USER tets IDENTIFIED BY 'mypass';-- создание пользователя test с паролем mypass
GRANT PROCESS,EXECUTE ON vinfo.* TO tets@'%';
END

Процедура компилируется, НО при ее выполнении ошибка "Operation failed CREATE USER failed fo 'tets'@'%'
Почему??
...
Рейтинг: 0 / 0
Создание пользователя в хранимой процедуре
    #39247166
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даниил ПакоvПочему??
Да кто ж знает, что там у тебя за засада?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
mysql> DROP PROCEDURE IF EXISTS CreateMyUsr;
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER //
mysql> CREATE PROCEDURE CreateMyUsr()
    -> BEGIN
    -> SELECT host,user FROM mysql.user;
    -> CREATE USER tets IDENTIFIED BY 'mypass'; -- создание пользователя test с паролем mypass
    -> SELECT host,user FROM mysql.user;
    -> DROP USER tets;
    -> END//
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;
mysql> CALL CreateMyUsr;
+-----------+-----------+
| host      | user      |
+-----------+-----------+
| localhost | mysql.sys |
| localhost | root      |
+-----------+-----------+
2 rows in set (0.01 sec)

+-----------+-----------+
| host      | user      |
+-----------+-----------+
| %         | tets      |
| localhost | mysql.sys |
| localhost | root      |
+-----------+-----------+
3 rows in set (0.01 sec)

Query OK, 0 rows affected (0.02 sec)

mysql> DROP PROCEDURE CreateMyUsr;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT host,user FROM mysql.user;
+-----------+-----------+
| host      | user      |
+-----------+-----------+
| localhost | mysql.sys |
| localhost | root      |
+-----------+-----------+
2 rows in set (0.00 sec)


Как видишь, оно работает нормально.
...
Рейтинг: 0 / 0
Создание пользователя в хранимой процедуре
    #39253460
Даниил Пакоv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо, а как в эту процедуру передать допустим переменный? (логин и пароль)
...
Рейтинг: 0 / 0
Создание пользователя в хранимой процедуре
    #39253467
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем логин или там пароль отличаются от других параметров?
...
Рейтинг: 0 / 0
Создание пользователя в хранимой процедуре
    #39253475
Даниил Пакоv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не понимаю, как строковый логин тут подключить?
...
Рейтинг: 0 / 0
Создание пользователя в хранимой процедуре
    #39253481
Даниил Пакоv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PROCEDURE vinfo.pAddUsr(IN pmLogin VARCHAR(16), IN pmPassword VARCHAR(50), IN pmAdm TINYINT, OUT pError VARCHAR(255))
b:
BEGIN
declare pCommand varchar(255) DEFAULT '' ;
declare exit handler FOR SQLEXCEPTION rollback; set pError:='Не получилось создать пользователя! ...';
SET pError:='';

IF CHARACTER_LENGTH(IFNULL(pmLogin,'' ))<3 THEN
SET pError:='Очень короткий логин, логин должен быть более 3 симв.';
Leave b ;
END if;

CREATE USER pmLogin ;
....
Он мне делает пользователя с именем pmLogin,а не со значение переменной ;)
...
Рейтинг: 0 / 0
Создание пользователя в хранимой процедуре
    #39253491
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть declare pCommand скопипастить внутрь процедуры получилось, а вот понять, зачем оно там унутре - уже нет...
...
Рейтинг: 0 / 0
Создание пользователя в хранимой процедуре
    #39253510
Даниил Пакоv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да. Как создать процедуру, которая создает пользователя с определенным логином и паролем, которые передаются туда как обычные строковые параметры??
...
Рейтинг: 0 / 0
Создание пользователя в хранимой процедуре
    #39253516
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Создание пользователя в хранимой процедуре
    #39253521
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даниил ПакоvОн мне делает пользователя с именем pmLogin,а не со значение переменной ;)
А сумеешь убедительно обосновать, почему сервер должен решить, что pmLogin - это именно имя переменной, а не литерал?
...
Рейтинг: 0 / 0
Создание пользователя в хранимой процедуре
    #39253541
Даниил Пакоv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
???
...
Рейтинг: 0 / 0
Создание пользователя в хранимой процедуре
    #39253560
Даниил Пакоv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так кто может подскажет создать пользователя в ХП? (аргументы у ХП - логин и пароль)?
...
Рейтинг: 0 / 0
Создание пользователя в хранимой процедуре
    #39253570
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даниил ПакоvТак кто может подскажет создать пользователя в ХП? (аргументы у ХП - логин и пароль)?Про prepared statements Вам уже несколько раз говорили, в т.ч. и в самом первом ответе.
...
Рейтинг: 0 / 0
Создание пользователя в хранимой процедуре
    #39253768
Даниил Пакоv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да разобрался..
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
REATE DEFINER = 'root'@'localhost'
PROCEDURE vinfo.pAddMySQLUsr(IN pmLogin VARCHAR(16), IN pmPassword VARCHAR(50), IN pmAdm TINYINT, OUT pError VARCHAR(255))
  COMMENT 'Добавление пользователя MySql с правами на запуск процедур'
b:
BEGIN
  declare pCommand varchar(255) DEFAULT '' ;
  declare exit handler FOR SQLEXCEPTION   rollback; set pError:='Не получилось создать пользователя! ...'; 
  SET pError:='';
  
IF CHARACTER_LENGTH(IFNULL(pmLogin,'' ))<3 THEN
 SET pError:='Очень короткий логин, логин должен быть более 3 симв.';
 Leave b ;
END if;
SET pCommand=CONCAT("CREATE USER ",pmLogin,"@'","%","'"," IDENTIFIED BY '",pmPassword,"'",";");
CALL _pExecSQL(pCommand);
CALL _pExecSQL(CONCAT("GRANT EXECUTE ON ",DATABASE(),".* TO ", pmLogin,"@'","%","'"));
END

Где
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
PROCEDURE vinfo._pExecSQL(vSQL varchar(10000))
BEGIN
IF CHARACTER_LENGTH(IFNULL(vSQL,''))>6 THEN
  SET @vGlobal_Script:=vSQL;
END IF;
IF CHARACTER_LENGTH(IFNULL(@vGlobal_Script,''))>6 then
  prepare smtp from @vGlobal_Script;
  execute smtp;
  drop prepare smtp;
END IF;  
END
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Создание пользователя в хранимой процедуре
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]