Ошибка с номерами 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)».
Связанные статьи:
- Ошибка «ERROR 1044 (42000): Access denied for user 'mial'@'localhost' to database 'TestDB'». Не удаётся создать базу данных MySQL (РЕШЕНО) (100%)
- Ошибка при использовании выражений USE в MySQL (MariaDB): «ERROR 1044 (42000): Access denied for user» (РЕШЕНО) (100%)
- Почему «mysql -h» не показывает справку. Ошибка «option '-h' requires an argument» (РЕШЕНО) (100%)
- Почему MySQL (MariaDB) запрашивает пароль, даже если он указан с опцией «-p» (РЕШЕНО) (100%)
- Ошибка «ERROR 1143 (42000)»: command denied to user for column in table в MySQL (MariaDB) (РЕШЕНО) (100%)
- Ошибка «remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead» (РЕШЕНО) (RANDOM - 5%)