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

Команды CREATE USER и GRANT не запрещены к использованию в хранимых процедурах. Как напрямую, так и через prepared statements.
...
Рейтинг: 0 / 0
31.05.2016, 09:18
    #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
31.05.2016, 09:51
    #39246763
Даниил Пакоv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользователя в хранимой процедуре
В тот то и дело , что внутри ХП эти команды не работают(
...
Рейтинг: 0 / 0
31.05.2016, 11:31
    #39246917
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользователя в хранимой процедуре
Даниил Пакоvвнутри ХП эти команды не работают
Неправда. Работают.
Команда либо исполняется, либо не исполняется по причине какой-либо ошибки (о чём непременно сообщается).
А если команда не делает того, что ты от неё ожидаешь - так это не она косячит. Она просто не умеет такого. Это ты в чём-то косячишь...
...
Рейтинг: 0 / 0
31.05.2016, 13:22
    #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
31.05.2016, 13:51
    #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
09.06.2016, 12:16
    #39253460
Даниил Пакоv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользователя в хранимой процедуре
Хорошо, а как в эту процедуру передать допустим переменный? (логин и пароль)
...
Рейтинг: 0 / 0
09.06.2016, 12:20
    #39253467
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользователя в хранимой процедуре
А чем логин или там пароль отличаются от других параметров?
...
Рейтинг: 0 / 0
09.06.2016, 12:29
    #39253475
Даниил Пакоv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользователя в хранимой процедуре
я не понимаю, как строковый логин тут подключить?
...
Рейтинг: 0 / 0
09.06.2016, 12:33
    #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
09.06.2016, 12:36
    #39253491
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользователя в хранимой процедуре
то есть declare pCommand скопипастить внутрь процедуры получилось, а вот понять, зачем оно там унутре - уже нет...
...
Рейтинг: 0 / 0
09.06.2016, 12:47
    #39253510
Даниил Пакоv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользователя в хранимой процедуре
да. Как создать процедуру, которая создает пользователя с определенным логином и паролем, которые передаются туда как обычные строковые параметры??
...
Рейтинг: 0 / 0
09.06.2016, 12:50
    #39253516
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользователя в хранимой процедуре
...
Рейтинг: 0 / 0
09.06.2016, 12:53
    #39253521
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользователя в хранимой процедуре
Даниил ПакоvОн мне делает пользователя с именем pmLogin,а не со значение переменной ;)
А сумеешь убедительно обосновать, почему сервер должен решить, что pmLogin - это именно имя переменной, а не литерал?
...
Рейтинг: 0 / 0
09.06.2016, 13:05
    #39253541
Даниил Пакоv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользователя в хранимой процедуре
???
...
Рейтинг: 0 / 0
09.06.2016, 13:18
    #39253560
Даниил Пакоv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользователя в хранимой процедуре
Так кто может подскажет создать пользователя в ХП? (аргументы у ХП - логин и пароль)?
...
Рейтинг: 0 / 0
09.06.2016, 13:23
    #39253570
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользователя в хранимой процедуре
Даниил ПакоvТак кто может подскажет создать пользователя в ХП? (аргументы у ХП - логин и пароль)?Про prepared statements Вам уже несколько раз говорили, в т.ч. и в самом первом ответе.
...
Рейтинг: 0 / 0
09.06.2016, 15:58
    #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
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Создание пользователя в хранимой процедуре / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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