zaLinux.ru

Ошибка «ERROR 1142 (42000)»: command denied to user for table в MySQL (MariaDB) (РЕШЕНО)


Ошибка с номерами 1142 (42000) возникает в тех случаях, когда у пользователя недостаточно привилегий на таблицу или базу данных для выполнения запроса.

Пример ошибки при выполнении запроса с выражением SELECT:

SELECT * FROM TestDB.TestTABLE;

Запрос завершился неудачей, получена ошибка:

ERROR 1142 (42000): SELECT command denied to user 'mial'@'localhost' for table `TestDB`.`TestTABLE`

Пример ошибки при выполнении запроса с выражением CREATE:

CREATE TABLE IF NOT EXISTS `TestDB`.`test_table` (`id` int(11) NOT NULL AUTO_INCREMENT, `test_column` text COLLATE utf8mb4_unicode_ci NOT NULL, PRIMARY KEY(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Запрос завершился неудачей, получена ошибка:

ERROR 1142 (42000): CREATE command denied to user 'mial'@'localhost' for table `TestDB`.`test_table`

Пример ошибки при выполнении запроса с выражением INSERT:

INSERT INTO TestTABLE (`id`, `test_column`) VALUES ("3", "it’s necessary here");

Запрос завершился неудачей, получена ошибка:

ERROR 1142 (42000): INSERT command denied to user 'mial'@'localhost' for table `TestDB`.`TestTABLE`

Чтобы разрешить ошибки с привилегиями (правами доступа) на уровне таблицы, смотрите статью «Как разрешить доступ пользователю только к определённым таблицам в MySQL (MariaDB)». Далее показано несколько популярных примеров.

Чтобы разрешить пользователю _USERNAME_ создавать таблицу _TestTABLE_ в базе данных _TestDB_ нужно выполнить следующий запрос:

GRANT CREATE ON _TestDB_._TestTABLE_ TO '_USERNAME_'@'localhost';

Чтобы разрешить пользователю _USERNAME_ вставлять новые записи в таблицу _TestTABLE_ которая находится в базе данных _TestDB_ нужно выполнить следующий запрос:


GRANT INSERT ON _TestDB_._TestTABLE_ TO '_USERNAME_'@'localhost';

Чтобы разрешить пользователю _USERNAME_ просматривать записи в таблице _TestTABLE_ базы данных _TestDB_ нужно выполнить следующий запрос:

GRANT SELECT ON _TestDB_._TestTABLE_ TO '_USERNAME_'@'localhost';

Если вы хотите предоставить пользователю все возможные привилегии на таблицу, то используйте запрос вида (замените _TestTABLE_ на имя таблицы, также замените _TestDB_ на имя вашей базы данных и замените _USERNAME_ на имя пользователя):

GRANT ALL PRIVILEGES ON _TestDB_._TestTABLE_ TO '_USERNAME_'@'localhost';

Все предыдущие команды предоставляли пользователю привилегии к одной определённой таблицы, то есть привилегии выдавались на уровне таблицы. Если же вы хотите предоставить пользователю привилегии сразу для всех таблиц в определённой базе данных, то вам нужно настроить привилегии уровня базы данных, о том, как это сделать, смотрите статью «Как разрешить пользователю доступ только к определённым базам данных в MySQL (MariaDB)».

Чтобы разрешить пользователю _USERNAME_ создавать таблицы в базе данных _TestDB_ нужно выполнить следующий запрос:

GRANT CREATE ON _TestDB_.* TO '_USERNAME_'@'localhost';

Чтобы разрешить пользователю _USERNAME_ вставлять новые записи в таблицах базы данных _TestDB_ нужно выполнить следующий запрос:

GRANT INSERT ON _TestDB_.* TO '_USERNAME_'@'localhost';

Чтобы разрешить пользователю _USERNAME_ просматривать записи в таблицах базы данных _TestDB_ нужно выполнить следующий запрос:

GRANT SELECT ON _TestDB_.* TO '_USERNAME_'@'localhost';

Если вы хотите предоставить пользователю все возможные привилегии на базу данных, то используйте запрос вида (замените _TestDB_ на имя вашей базы данных и замените _USERNAME_ на имя пользователя):

GRANT ALL PRIVILEGES ON _TestDB_.* TO '_USERNAME_'@'localhost';

Кроме предоставления привилегий на таблицы и базы данных целиком, вы можете предоставить пользователю привилегии на отдельные колонки таблицы. Подробности смотрите в статье «Как разрешить доступ пользователю только к определённым столбцам в MySQL (MariaDB)».


Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *