1

Тема: Делегирование прав пользователям

Прочитав FAQ таки не понял, как делегировать пользователю возможность создавать и удалять свои базы данных при этом не давая возможности удалять чужие базы данных. Если у кого есть практический опыт, поделитесь pls.

2

Re: Делегирование прав пользователям

elk
Средствами phpMyAdmin создание пользователей с определенными привилегиями может выглядеть следующим образом.

Необходимо соединиться с MySQL сервером как пользователь root. Затем перейти по ссылке 'Privileges' на страницу администрирования учетных записей пользователей, где можно задавать привилегии (в том числе и глобальные).

Допустим, что нужно создать пользователя и разрешить ему править (в том числе и удалять) собственную базу, а также в случае чего удалить её.

Нужно перейти по ссылке 'Add a new User' - задать здесь имя пользователя, пароль, хост. Затем задать ему привилегии для работы с данными (Data), структурой (Structure) - здесь в нашем случае нужно разрешить CREATE (если задать DROP он сможет удалять не принадлежащие ему базы данных).

В результате созданный пользователь может работать с данными (в той степени в какой ему разрешено в блоке Data) базы данных, а также создавать и удалять принадлежащие ему базы данных.

Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)

3

Re: Делегирование прав пользователям

Lokki сказал:

elk
Средствами phpMyAdmin создание пользователей с определенными привилегиями может выглядеть следующим образом.

Необходимо соединиться с MySQL сервером как пользователь root. Затем перейти по ссылке 'Privileges' на страницу администрирования учетных записей пользователей, где можно задавать привилегии (в том числе и глобальные).

Допустим, что нужно создать пользователя и разрешить ему править (в том числе и удалять) собственную базу, а также в случае чего удалить её.

Нужно перейти по ссылке 'Add a new User' - задать здесь имя пользователя, пароль, хост. Затем задать ему привилегии для работы с данными (Data), структурой (Structure) - здесь в нашем случае нужно разрешить CREATE (если задать DROP он сможет удалять не принадлежащие ему базы данных).

В результате созданный пользователь может работать с данными (в той степени в какой ему разрешено в блоке Data) базы данных, а также создавать и удалять принадлежащие ему базы данных.

Т.е., если я правильно понимаю, то все возможности по созданию и удалению пользователем баз данных определяются соответствующимщи правами в Global Priveleges? И если разрешать пользователю удалять базы данных, то его ничто не остановит (кроме собственной порядочности и внимательности) от удаления чужих баз данных?

А каким же тогда образом делегировать одному из пользователей полномочия на создание и удаление БД, чтобы не пострадали другие пользователи?

И что тогда имеется в виду в FAQ (раздел 4.5) под  "ввести с помощью группового символа имя базы данных для пользователя"? Позволит ли это создавать и удалять пользователю БД начинающиеся только с соответствующего префикса?

4

Re: Делегирование прав пользователям

elk

Т.е., если я правильно понимаю, то все возможности по созданию и удалению пользователем баз данных определяются соответствующимщи правами в Global Priveleges?

Так точно. Только если ты не дашь ему глобальные привилегии на DROP, то он не сможет удалять никакие базы данных кроме своих собственных (к коим относятся разумеется им созданные)

5

Re: Делегирование прав пользователям

elk

А каким же тогда образом делегировать одному из пользователей полномочия на создание и удаление БД, чтобы не пострадали другие пользователи?

Я уже написал: для этого ему нужно дать глобальные привилегии на создание - CREATE. Таким образом, он сможет как создавать самостоятельно базы данных, так и удалять созданные им самим (но не чужие) базы данных.

И что тогда имеется в виду в FAQ (раздел 4.5) под  "ввести с помощью группового символа имя базы данных для пользователя"?

Это означает, что если ты в поле 'Add privileges on the following database' укажешь в качестве базы данных, например, 'elk%' - то заданные привилегии будут распространяться на те базы данных, которые начинаются с 'elk'.

Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)

6

Re: Делегирование прав пользователям

Rash сказал:

elk

Т.е., если я правильно понимаю, то все возможности по созданию и удалению пользователем баз данных определяются соответствующимщи правами в Global Priveleges?

Так точно. Только если ты не дашь ему глобальные привилегии на DROP, то он не сможет удалять никакие базы данных кроме своих собственных (к коим относятся разумеется им созданные)

Вроде с wildcard именем получилось, позволяет создавать базы начинающиеся только с имя_, а вот удалять базы не позволяет никакие. Вопрос - чтобы пользователь мог удалять какие-либо базы данных (даже свои) ему нужен глобальный дроп? При попытке вынести базу данных пользователя им же созданную получаю - "команда удалить "БД" отключена". Сделать из-под root-а что-нибудь типа 'grant drop databasе on имя% to имя@localhost;' дает тот же ответ "команда удалить "БД" отключена".

7

Re: Делегирование прав пользователям

elk
Да, такая глобальная привилегия как DROP в данном случае пользователю ни к чему (иначе ты уполномочишь его удалять все подряд), достаточно ограничиться конкретными (ему принадлежащими) базами. Зайди в свойства пользователя, затем в блоке 'Database-specific privileges' укажи DROP для необходимых баз.

Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)

8

Re: Делегирование прав пользователям

Lokki сказал:

elk
Да, такая глобальная привилегия как DROP в данном случае пользователю ни к чему (иначе ты уполномочишь его удалять все подряд), достаточно ограничиться конкретными (ему принадлежащими) базами. Зайди в свойства пользователя, затем в блоке 'Database-specific privileges' укажи DROP для необходимых баз.

Первым делом спасибо за помощь, теперь о грустном - зашел в свойства пользователя, DROP для необходимых баз установлен, но, если я не ошибаюсь, этот DROP работает только на структуру самой базы, т.е. "DROP table" внутри базы работает на ура, а вот удалить саму эту базу я не могу.

В привилегиях на базу это выглядит как:

Пользователи с правами доступа к "kan_test"

Пользователь Хост Тип Привилегии Предоставлять
kan  localhost шаблон: kan%  SELECT, INSERT, UPDATE, DELETE, CREATE, DROP  Нет

9

Re: Делегирование прав пользователям

elk
версия phpMyAdmin какая?

если я не ошибаюсь, этот DROP работает только на структуру самой базы

Ошибаешься, работает на удаление как таблиц, так и баз данных

Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)

10

Re: Делегирование прав пользователям

phpMyAdmin 2.7.0-pl2
MySQL 5.0.18

11

Re: Делегирование прав пользователям

elk
ты заходишь под рутовым паролем?
ты удаляешь от имени kan именно базу kan_test?

Для пользователя kan в блоке 'Привилегии, специфичные для базы данных' поля д.б. заполнены след. образом:
БД:  kan_test (либо kan%);
Привилегии: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP;

После смены привилегий не забудь перезапустить MySQL сервер

Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)

12

Re: Делегирование прав пользователям

Lokki сказал:

elk
ты заходишь под рутовым паролем?
у тебя создана база kan_test?

база kan_test создана, для пользователя kan (если смотреть привелегии для базы данных под root-ом) опция DROP для базы kan_test предоставлена. Заходя под пользователем kan (под ним же была и создана база kan_test) я не имею на экране кнопки "удалить" для базы kan_test, хотя замечательно могу внутри базы создавать и удалять таблицы. На sql-льный запрос под пользователем kan "drop database kan_test" получаю "команда удалить "БД" отключена".

13

Re: Делегирование прав пользователям

Lokki сказал:

elk
ты заходишь под рутовым паролем?
ты удаляешь от имени kan именно базу kan_test?

Для пользователя kan в блоке 'Привилегии, специфичные для базы данных' поля д.б. заполнены след. образом:
БД:  kan_test (либо kan%);
Привилегии: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP;

После смены привилегий не забудь перезапустить MySQL сервер

flush privileges не достаточно?

14

Re: Делегирование прав пользователям

elk

flush privileges не достаточно?

вполне

Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)

15

Re: Делегирование прав пользователям

в аську стучался безрезультатно, flush ситуации не изменил, создавать и управлять структурой базы - сколько угодно, удалить базу - нет.

16

Re: Делегирование прав пользователям

elk

в аську стучался безрезультатно

"...агу, это elk касательно phpmyadmina..." - довольно-таки малоинформативно для решения вопроса...
Я воспроизвел описаную задачу с указанными данными на локальной машине - все работает.

Дай своему пользователю 'kan' глобальные права SELECT.

Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)

17

Re: Делегирование прав пользователям

Lokki сказал:

elk

в аську стучался безрезультатно

"...агу, это elk касательно phpmyadmina..." - довольно-таки малоинформативно для решения вопроса...
Я воспроизвел описаную задачу с указанными данными на локальной машине - все работает.

Дай своему пользователю 'kan' глобальные права SELECT.

Спасибо за помощь, но ларчик как оказалось просто открывался -

$cfg['AllowUserDropDatabase'] булево выражение
Определяет разрешено ли обычному пользователю (не администратору) удалять собственные базы данных или нет. Если установлено значение FALSE, ссылка "Drop Database" не будет отображаться, и даже команда "DROP DATABASE mydatabase" будет отклонена. Весьма практично для ISP'S со множеством клиентов.

18

Re: Делегирование прав пользователям

elk
Действительно, весьма аккуратное решение, т.к. оно позволяет обойтись и без присваивания пользователю глобальной привилегии на просмотр данных (что далеко не всегда желательно).

Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)