Вопрос или проблема
Я использую: mysql 5.5.43-0 на ubuntu 14.04.1
Я пытаюсь создать нового пользователя-администратора (admin), который может делать следующее:
- a создавать новых пользователей (dbuser1) с паролем – (разрешение “создание пользователя” -> работает)
- b устанавливать пароль для вновь созданного пользователя – (разрешение “вставка/обновление в таблице mysql.user” -> работает)
- c предоставлять доступ ко всем таблицам – (GRANT USAGE ON . TO ‘dbuser1’@’localhost’ IDENTIFIED BY … -> работает)
- d создавать новую базу данных (db4user1) – (разрешение “создание” -> работает)
- e предоставлять все привилегии – (GRANT ALL PRIVILEGES ON
db4user1
.* TO ‘dbuser1’@’localhost’;) – (разрешение для администратора -> не работает)
У меня возникла проблема с шагом e.
Mysql показывает следующую ошибку: #1044 – Доступ запрещен для пользователя ‘admin’@’localhost’ к базе данных ‘db4user1’
Вопрос: Какие дополнительные разрешения/привилегии нужны моему администратору, чтобы выполнять вышеупомянутые действия и ничего больше.
Я думаю, что у моего пользователя-администратора были все разрешения, чтобы предоставить существующему пользователю доступ к новой базе данных…
Но это не сработало.
Спасибо за вашу помощь
Штефан
CREATE USER 'dbuser1'@'localhost' IDENTIFIED BY 'password1234'
SET PASSWORD FOR 'dbuser1'@'localhost' = PASSWORD('password5678')
GRANT USAGE ON *.* TO 'dbuser1'@'localhost' IDENTIFIED BY 'password5678' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
CREATE DATABASE IF NOT EXISTS `db4user1`;
GRANT ALL PRIVILEGES ON `db4user1`.* TO 'dbuser1'@'localhost';
-> #1044 – Доступ запрещен для пользователя ‘admin’@’localhost’ к базе данных ‘db4user1’
Мне кажется, что вы хотите создать еще одного администратора, как по умолчанию root
, так что вы можете использовать простой синтаксис, как этот:
GRANT ALL ON *.* TO admin@localhost IDENTIFIED BY 'passwd5678' WITH GRANT OPTION;
Минимальное требование для предоставления достаточных прав данному пользователю (admin
здесь), чтобы он мог предоставить все привилегии на данную БД (db4user1
здесь), это:
GRANT DROP ,
REFERENCES ,
INDEX ,
ALTER ,
CREATE TEMPORARY TABLES ,
LOCK TABLES ,
CREATE VIEW ,
EVENT,
TRIGGER,
SHOW VIEW ,
CREATE ROUTINE,
ALTER ROUTINE,
EXECUTE ON `db4user1` . * TO 'admin'@'localhost' WITH GRANT OPTION ;
Почти все…за исключением :
Create
(структурные права)Select
,Insert
,Update
,Delete
(права на данные)
Отсюда, используя пользователя admin
:
mysql> GRANT ALL PRIVILEGES ON db4user1.* TO 'dbuser1'@'localhost';
Запрос выполнен, 0 строк затронуто (0.00 сек)
Признаюсь, я не нашел никаких документов по этому вопросу. Я в прошлом потратил много времени на тестирование всех возможностей, продвигаясь методом исключения, шаг за шагом…
Ответ или решение
Решение проблемы с правами доступа в MySQL
Введение
В задаче, описанной выше, вы сталкиваетесь с проблемой, где созданный администратор (admin
) не может предоставить права новому пользователю (dbuser1
) на новую базу данных (db4user1
). В данном ответе мы разберёмся с необходимыми правами, чтобы решить эту проблему, а также объясним, почему возникают ошибки.
Причины проблемы
Ошибка #1044 - Access denied for user 'admin'@'localhost' to database 'db4user1'
возникает, когда пользователь, пытающийся выполнить команду GRANT
, не имеет достаточных прав на саму базу данных или структуры базы данных, которые он пытается затронуть. В MySQL права пользователей и возможность их делегирования организованы иерархически, и для успешного выполнения команды GRANT
вам необходимо наличие соответствующих прав.
Необходимые привилегии для пользователя admin
Для того чтобы admin
мог предоставить все права на базу данных db4user1
для dbuser1
, ему необходимо иметь не только возможность создавать базы данных и пользователей, но и конкретные привилегии на эту самую базу данных.
Минимальные требования для предоставления прав на базу данных db4user1
включают следующие привилегии:
GRANT DROP,
REFERENCES,
INDEX,
ALTER,
CREATE TEMPORARY TABLES,
LOCK TABLES,
CREATE VIEW,
EVENT,
TRIGGER,
SHOW VIEW,
CREATE ROUTINE,
ALTER ROUTINE,
EXECUTE
ON `db4user1`.* TO 'admin'@'localhost' WITH GRANT OPTION;
Обратите внимание! Убедитесь, что пользователь admin
также имеет следующие ключевые привилегии:
- SELECT
- INSERT
- UPDATE
- DELETE
- CREATE
Эти привилегии являются необходимыми для выполнения операций с данными и их структуры в базе данных db4user1
, что требуется для корректного выполнения команды GRANT ALL PRIVILEGES
.
Примеры выполнения команд
После получения необходимых привилегий выполните следующие команды:
-
Убедитесь, что
admin
имеет нужные права:SHOW GRANTS FOR 'admin'@'localhost';
-
Если права не достаточно, добавьте их:
GRANT ALL PRIVILEGES ON db4user1.* TO 'admin'@'localhost' WITH GRANT OPTION;
-
Теперь, как
admin
, выполните команду, чтобы предоставить все праваdbuser1
:GRANT ALL PRIVILEGES ON db4user1.* TO 'dbuser1'@'localhost';
Если всё выполнено корректно, вы должны увидеть сообщение
Query OK, 0 rows affected
.
Заключение
Следуя приведённым шагам и удостоверившись, что у пользователя admin
имеются все необходимые права, вы сможете успешно настроить создание пользователей и предоставление прав на базу данных в MySQL. Права в MySQL требуют внимательности и детального подхода, чтобы избежать ошибок доступа. Если у вас будут возникать трудности, ознакомьтесь с официальной документацией MySQL по привилегиям и правам доступа, что обеспечит более глубокое понимание управления пользователями и их правами.