Пользователь с правами доступа не может предоставить права доступа новому пользователю и новой базе данных.

Вопрос или проблема

Я использую: 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.

Примеры выполнения команд

После получения необходимых привилегий выполните следующие команды:

  1. Убедитесь, что admin имеет нужные права:

    SHOW GRANTS FOR 'admin'@'localhost';
  2. Если права не достаточно, добавьте их:

    GRANT ALL PRIVILEGES ON db4user1.* TO 'admin'@'localhost' WITH GRANT OPTION;
  3. Теперь, как admin, выполните команду, чтобы предоставить все права dbuser1:

    GRANT ALL PRIVILEGES ON db4user1.* TO 'dbuser1'@'localhost';

    Если всё выполнено корректно, вы должны увидеть сообщение Query OK, 0 rows affected.

Заключение

Следуя приведённым шагам и удостоверившись, что у пользователя admin имеются все необходимые права, вы сможете успешно настроить создание пользователей и предоставление прав на базу данных в MySQL. Права в MySQL требуют внимательности и детального подхода, чтобы избежать ошибок доступа. Если у вас будут возникать трудности, ознакомьтесь с официальной документацией MySQL по привилегиям и правам доступа, что обеспечит более глубокое понимание управления пользователями и их правами.

Оцените материал
Добавить комментарий

Капча загружается...