SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 25.04.2011 12:25:45

kharkov_max
Завсегдатай
Зарегистрирован: 12.09.2009
Сообщений: 62

Routines - права пользователя на просмотр процедуры.

Добрый день.

Наткнулся на одну неприятную вещь, возможно я что то делаю не так...

Создал в базе процедуру, далее для удобства написания и т.д. использовал Mysql WorkBench, под рутом все расчудесно работает.
Когда все дописал, решил обрезать root доступ только от localhost а для базы и процедуры (внешие подключения) создал юзера.

Новый юзер может подключаться с localhost и некоторых внешних IP только к моей базе.
Для процедур дал этому юзеру права:
grant all on procedure routine.res to user;

В создании процедуры добавил права на этого пользователя:
REATE DEFINER=`user`@`%` PROCEDURE .....

Вроде все работает, но возникла необходимость изменить процедуру, решил это сделать под новым юзером (user).
Подключился к базе с правами нового пользователя через Mysql WorkBench но получить текст процедуры не могу и как следствие изменить ее. Таблицы читаются и процедура, от имени это пользователя работает.
Под root все работает, но так как REATE DEFINER=`user`@`%` PROCEDURE ..... не могу запустить процедуру для отладки результата.
Какждый раз, для того то б изменить что-то переключаться на root как-то проблематично.

Подскажите пожалуйста выход из ситуации или укажите на мою ошибку ... что я делаю не так ?
Может даже это фича такая у WorkBench ...
Заранее спасибо.

Неактивен

 

#2 25.04.2011 20:13:16

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Routines - права пользователя на просмотр процедуры.

А права на пользователя покажите? Проще всего подключиться под ним
и выполнить SHOW GRANTS;

Неактивен

 

#3 26.04.2011 11:08:36

kharkov_max
Завсегдатай
Зарегистрирован: 12.09.2009
Сообщений: 62

Re: Routines - права пользователя на просмотр процедуры.

Ответило вот так:

Код:

 GRANT USAGE ON *.* TO 'user'@'localhost' IDENTIFIED BY PASSWORD '*dsfsfsfsfw3432r3fwe4542wef2r4fe' |
| GRANT ALL PRIVILEGES ON `base`.* TO 'user'@'localhost'

Как я понимаю этого не достаточно ...
Как правильно исправить ситуацию ?

Неактивен

 

#4 26.04.2011 14:19:37

kharkov_max
Завсегдатай
Зарегистрирован: 12.09.2009
Сообщений: 62

Re: Routines - права пользователя на просмотр процедуры.

Вроде разобрался.

Залез в таблицу mysql.proc и изменил поле definer нужных процедур с user@% на user@IP, т.е. указал конкретный IP адрес и после этого заработало нормально.

Вот теперь более конкретный вопрос.
Символ % уже не рулит ?

Код:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 5.5.11 Source distribution

Я так понимаю что если теперь указывать REATE DEFINER=`user`@`IP_адрес` PROCEDURE ..... то все будет работать, но что делать если юзеру нужно дать доступ от нескольких внешних IP адресов ?
На данный момент от пользователя SHOW GRANTS; такие же как и до внесенных изменений.

Неактивен

 

#5 26.04.2011 20:02:14

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Routines - права пользователя на просмотр процедуры.

Вы подключились под другим пользователем (с localhost), а надо было подключиться
под тем пользователем, с которым проблемы.

user@localhost, user@ip и user@'%' — это три разных пользователя.

Неактивен

 

#6 27.04.2011 08:14:43

kharkov_max
Завсегдатай
Зарегистрирован: 12.09.2009
Сообщений: 62

Re: Routines - права пользователя на просмотр процедуры.

paulus написал:

Вы подключились под другим пользователем (с localhost), а надо было подключиться
под тем пользователем, с которым проблемы.

user@localhost, user@ip и user@'%' — это три разных пользователя.

На сколько я понимаю символ % говорит что от любого IP или доменного имени.

Права юзеру на базу давал так:

Код:

grant all on base.* to user@'%' identified by 'password';

Подключался для проверки grant так:

Код:

localhost> mysql -u user -p

Что сделал не верно ?

Неактивен

 

#7 28.04.2011 20:43:55

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Routines - права пользователя на просмотр процедуры.

Подключились по unix socket под пользователем user@localhost
(который ≠ user@'%').

Неактивен

 

#8 29.04.2011 10:34:30

kharkov_max
Завсегдатай
Зарегистрирован: 12.09.2009
Сообщений: 62

Re: Routines - права пользователя на просмотр процедуры.

paulus написал:

Подключились по unix socket под пользователем user@localhost
(который ≠ user@'%').

Да действительно под socket ходил ....

Странно конечно, но ...
Удалил все права пользователя, прересоздал права заново - все заработало и доступ и изменение процедур.
Но права пришлось давать такие

Код:

GRANT ALL ON base.* TO 'user'@'%' IDENTIFIED BY 'password';

После % пришлось добавить и для localhost, а то по сетке пускало а локально - нет.

Код:

GRANT ALL ON base.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Спасибо за помощь.

Неактивен

 

#9 29.04.2011 11:57:26

kharkov_max
Завсегдатай
Зарегистрирован: 12.09.2009
Сообщений: 62

Re: Routines - права пользователя на просмотр процедуры.

Уважаемый paulus, все же мне немного не понятно как дать полный доступ к процедуре если редактирование, изменение процедуры планируется вести с нескольких внешних IP адресов. Доступ c любого IP для пользователя не хотелось бы давать.
Права на базу можно дать так:

Код:

GRANT ALL ON base.* TO 'user'@'IP1' IDENTIFIED BY 'password';
GRANT ALL ON base.* TO 'user'@'IP2' IDENTIFIED BY 'password';

А как это сделать для процедуры ?
Ведь тут:

Код:

REATE DEFINER=`user`@`%` PROCEDURE

на сколько я понимаю, можно указать только один доступ...
делать =`user`@`%` не хотелось бы.
Хотел бы сделать как то так =`user`@`IP1` и =`user`@`IP2`.

Неактивен

 

#10 29.04.2011 12:13:26

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Routines - права пользователя на просмотр процедуры.

DEFINER процедуры используется для определения прав работы самой процедуры.
Допустим, у Вас есть сверхсекретная табличка, к которой Вы не хотите давать
доступ пользователям. Вы можете сделать процедуру, которая будет работать с
этой табличкой так, как Вам нужно, и создателем этой процедуры должен быть
человек, который может эту табличку читать.

Пример:
1. Есть табличка A, на которую есть права только у пользователя root@localhost.
2. root@localhost создает хранимую процедуру P, которая позволяет читать неко-
торые строки из таблички A.
3. root@localhost дает право пользователю user@localhost запускать P.
4. В результате, user@localhost не может ничего сделать с таблицей A, но зато
может вызвать P и через нее получить доступ к некоторым строкам этой таблицы.

Это я всё к тому, что DEFINER определяет права внутри процедуры, а права запуска
процедуры определяются снаружи, такими же GRANTами, которые Вы написали.

Неактивен

 

Board footer

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