SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 10.02.2010 15:48:56

samba777
Участник
Зарегистрирован: 10.02.2010
Сообщений: 2

Как раздать права пользователям внутри процедуры?

Добрый день, Товарищи!!

Есть задача сделать личный кабинет для каждого пользователя на сайте. Я решил сделать всё на процедурах и представлениях. Поэтому каждому пользователю необходимо раздать права. Возможно ли это сделать в процедуре? Имхо делать это ручками будет ужасно утомительно.

В результате вызова процедуры

DROP PROCEDURE IF EXISTS `my`.`get_rights`//
CREATE PROCEDURE `my`.`get_rights`(IN logg varchar(50))
BEGIN
CREATE USER `logg` IDENTIFIED BY '1234';
GRANT select on my.balance to `logg`;
END//

call my.get_rights('user1');

в таблице пользователей mysql.user и в таблице прав создаётся пользователь `logg` вместо `user1`.

Неактивен

 

#2 10.02.2010 17:21:57

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как раздать права пользователям внутри процедуры?

Согласно документации ( http://dev.mysql.com/doc/refman/5.1/en/ … ments.html )
с версии MySQL 5.1.12 подготовленные выражения поддерживают команды CREATE USER и GRANT

Согласно опыту участников форума ( http://sqlinfo.ru/forum/viewtopic.php?id=2217 ) это не совсем так.
Попробуйте, если не получится, то придется делать руками insert в таблицу mysql.user

P.S. О подготовленных выражениях можно почитать http://sqlinfo.ru/forum/viewtopic.php?id=363

Неактивен

 

#3 15.02.2010 07:56:25

samba777
Участник
Зарегистрирован: 10.02.2010
Сообщений: 2

Re: Как раздать права пользователям внутри процедуры?

vasya написал:

Согласно документации ( http://dev.mysql.com/doc/refman/5.1/en/ … ments.html )
с версии MySQL 5.1.12 подготовленные выражения поддерживают команды CREATE USER и GRANT

Согласно опыту участников форума ( http://sqlinfo.ru/forum/viewtopic.php?id=2217 ) это не совсем так.
Попробуйте, если не получится, то придется делать руками insert в таблицу mysql.user

P.S. О подготовленных выражениях можно почитать http://sqlinfo.ru/forum/viewtopic.php?id=363

ОГРОМНОЕ спасибо !!

Помогла ссылка http://sqlinfo.ru/forum/viewtopic.php?id=363

Рабочий вариант получился так:

DROP PROCEDURE IF EXISTS `my`.`get_rights`//
CREATE PROCEDURE `my`.`get_rights`(IN logg varchar(50))
BEGIN
SET @var = CONCAT('CREATE USER ',logg);
PREPARE zelye FROM @var;
EXECUTE zelye;

SET @var = CONCAT('grant select on my.user_balance to ',logg);
PREPARE zelye FROM @var;
EXECUTE zelye;
END//

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson