next40
Итак. Условия задачи: имеется 4 базы данных: db_1, db_2, db_3, db_4. Необходимо создать 2 пользователей (не обладающих правами root): user1 и user2 чтобы каждый имел доступ только к своей базе данных и не имел доступа к остальным трем базам: user1 - db_1, user2 - db_2. Для многопользовательского использования буду использовать cookie-аутентификацию, чтобы не нагромождать массив в конфиге.
Решение: переходим по ссылке 'Privileges', создаем пользователя user1 - 'Add a new User'.
Действия на странице 'Add a new User'
'User name' = user1; 'Host' = localhost; 'Password' = *****. Далее смотрим, чтобы ничего не было отмечено в блоке 'Global privileges', если не верим своим глазам - давим на ссылку 'Uncheck All'. Жмем на 'Go' и получаем новоиспеченного пользователя user1, который еще не обладает никакими правами - в печь его, работаем над ним дальше.
Действия на странице "User 'user1'@'localhost' : Edit Privileges"
В блоке 'Global privileges' ни один чекбокс не должен быть отмечен, особо сомневающиеся в своих мониторах и зрении кликают по ссылке 'Uncheck All'.
Переходим к блоку 'Database-specific privileges' в котором представлена пустая пока еще таблица с полями 'Database', 'Privileges', 'Grant', 'Table-specific privileges', 'Action'. Из выпадающего списка 'Add privileges on the following database' выбираем базу данных 'db_1', и автоматически переходим на страницу 'User 'user1'@'localhost' - Database db_1 : Edit Privileges'
Действия на странице "User 'user1'@'localhost' - Database db_1 : Edit Privileges"
Первое, что попадается на глаза - блок 'Database-specific privileges', который содержит привилегии на базу 'db_1', что нам и нужно. Привилегии разбиты на 3 категории: 'Data', 'Structure', 'Administration', которые соответственно означают права на действия в базе данных 'db_1' с данными, структурой и администрированием.
"Расщедримся" и дадим user1 широкие права для работы с 'db_1' - отмечаем все чекбоксы в категориях 'Data', 'Structure'. Жмем 'Go'.
Отступление. Но, можно "ущемить" пользователя в правах в блоке 'Table-specific privileges', указав там отдельные таблицы - таким образом полномочия user1 сузятся еще больше - до отдельных таблиц. Но нужно иметь ввиду, что в последнем случае user1 не должен иметь прав на 'db_1', которые задали ему в блоке 'Database-specific privileges', т.к. они распространяются на ВСЮ базу данных и если вы разрешите ему права SELECT на всю базу данных, то он и будет смотреть всю базу данных, несмотря на привилегии, специфичные для отдельных таблиц.
Итак, phpMyAdmin любезно сообщает нам, что привилегии пользователя user1 были нами обновлены:
You have updated the privileges for 'user1'@'localhost'. Теперь проверим. Закрываем окно браузера, запускаем его снова. При авторизации указываем user1 / ***** - доступна только 'db_1'.
Создаем пользователя user2
Повторяем те же самые манипуляции для пользователя user2, только привилегии ему даем на базу 'db_2'. Проверяем: Закрываем окно браузера, запускаем его снова. При авторизации указываем user2 / ***** - доступна только 'db_2'. Соответственно базы 'db_3' и 'db_4' не доступны ни одному из созданных нами пользователей.
Что и требовалось получить.
Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)