Оглавление
1. Оператор «USE» вызывает ошибку «ERROR 1044 (42000)»
3. Как предоставить пользователю права чтения базы данных и её содержимого
3.1 Как предоставить пользователю права чтения на определённую базу данных в MySQL (MariaDB)
3.2 Как предоставить пользователю права чтения на все базы данных в MySQL (MariaDB)
4. Как предоставить пользователю определённые привилегии на базу данных в MySQL (MariaDB)
5. Как предоставить пользователю все привилегии на базу данных в MySQL (MariaDB)
7. Как проверить текущие привилегии пользователя
Оператор «USE» вызывает ошибку «ERROR 1044 (42000)»
Данная заметка посвящена ошибке, которая возникает при попытке выбрать базу данных для использования, то есть выполнить выражение вида:
USE YOUR-DB;
Но запрос завершается ошибкой:
ERROR 1044 (42000): Access denied for user 'YOUR-USERNAME'@'localhost' to database 'YOUR-DB'
Например:
USE TestDB; ERROR 1044 (42000): Access denied for user 'mial'@'localhost' to database 'TestDB'
Причин у такой ошибки может быть несколько. Например:
- Пользователь не имеет прав на любые действия с указанной базой данных
- Указанная база данных не существует
Что касается второго варианта (указанная база данных не существует), то в этом случае ошибки могут быть разные — это зависит от прав пользователя на базу данных. А именно:
- если база данных не существует и у пользователя нет привилегий на её чтение, то будет выведена приведённая выше ошибка
- если база данных не существует и у пользователя имеются привилегии на её чтение (такое сочетание возможно, например, если база данных существовала, а затем была удалена), то будет выведено следующее сообщение об ошибке:
ERROR 1049 (42000): Unknown database 'TestDB'
Рассмотрим ситуацию, когда база данных существует, но у пользователя отсутствуют права на её чтение.
Как исправить ошибку MySQL (MariaDB) «ERROR 1044 (42000): Access denied for user» при использовании оператора USE
Примечание: кстати, точно такая же ошибка «ERROR 1044 (42000)» может возникать при попытке создать базу данных. Если вы пытаетесь создать, базу данных, то смотрите статью: Ошибка «ERROR 1044 (42000): Access denied for user ‘mial’@’localhost’ to database ‘TestDB’». Не удаётся создать базу данных MySQL (РЕШЕНО)
Данная статья посвящена ошибке «ERROR 1044 (42000)» возникающей при попытке выбрать базу данных для использования с помощью оператора «USE».
Чтобы исправить ошибку «ERROR 1044 (42000)», необходимо предоставить пользователю привилегии для работы с базой данных.
Пользователю можно предоставить как полный набор привилегий для работы с базой данных (включая создание таблиц, добавление и изменение записей в таблицах), так и ограничиться правом чтения базы данных.
Как предоставить пользователю права чтения базы данных и её содержимого
Как предоставить пользователю права чтения на определённую базу данных в MySQL (MariaDB)
Чтобы пользователь мог использовать операторы «USE» и «SELECT» выполните следующий запрос (замените «TestDB» на имя вашей базы данных, а «YOUR-USERNAME» на имя вашего пользователя):
GRANT SELECT ON TestDB.* TO 'YOUR-USERNAME'@'localhost';
Примечание: данный запрос, а также все представленные ниже запросы должны выполняться от имени пользователя root или другого пользователя, который имеет достаточными привилегиями на базы данных и при этом имеет право на передачу привилегий другим пользователям.
Например:
GRANT SELECT ON TestDB.* TO 'mial'@'localhost';
После этого запроса пользователь «mial» может просматривать содержимое базы данных «TestDB», то есть в отношении данной базы данных он может выполнять запросы с операторами «USE» и «SELECT».
Изменения вступают в силу немедленно, даже если пользователь «mial» подключён к серверу СУБД во время предоставления ему данных привилегий.
При выполнении запроса «SHOW DATABASES;» база данных «TestDB» появится в списке выводимых баз данных для пользователя «mial».
Как предоставить пользователю права чтения на все базы данных в MySQL (MariaDB)
Если вам нужно, чтобы пользователь мог использовать операторы «USE» и «SELECT» в отношении всех баз данных, то есть чтобы пользователь мог просматривать содержимое баз данных, используйте запрос следующего вида (замените «YOUR-USERNAME» на имя вашего пользователя):
GRANT SELECT ON *.* TO 'YOUR-USERNAME'@'localhost';
Например, для предоставления пользователю «mial» прав чтения всех баз данных нужно выполнить следующий запрос:
GRANT SELECT ON *.* TO 'mial'@'localhost';
Теперь пользователь «mial» может выполнять запросы «USE» и «SELECT» в отношении всех баз данных, а также может выполнять запрос «SHOW DATABASES;». Если пользователь «mial» был подключён к серверу СУБД в момент предоставления ему привилегий, то для вступления изменений в силу, пользователю необходимо отключиться и подключиться заново.
Как предоставить пользователю права чтения на определённую таблицу в определённой базе данных в MySQL (MariaDB)
Чтобы пользователь мог просматривать содержимое только определённой таблицы в базе данных, используйте следующий запрос (замените «TestDB» на имя вашей базы данных, «TestTABLE» замените на имя таблицы, а «YOUR-USERNAME» на имя вашего пользователя):
GRANT SELECT ON TestDB.TestTABLE TO 'YOUR-USERNAME'@'localhost';
Например:
GRANT SELECT ON TestDB.TestTABLE TO 'mial'@'localhost';
После этого запроса пользователь «mial» может просматривать содержимое таблицы «TestTABLE» базы данных «TestDB», то есть в отношении данной базы данных он может выполнять запрос с оператором «USE», а в отношении указанной таблицы он сможет выполнять запрос с оператором «SELECT». Изменения вступают в силу немедленно, даже если пользователь «mial» подключён к серверу СУБД во время предоставления ему данных привилегий.
При выполнении запроса «SHOW DATABASES;» база данных «TestDB» появится в списке выводимых баз данных для пользователя «mial». А при выполнении запроса «SHOW TABLES;» таблица «TestTABLE» появится в списке выводимых таблиц (все остальные таблицы останутся невидимыми для данного пользователя).
Как предоставить пользователю определённые привилегии на базу данных в MySQL (MariaDB)
Кроме предоставления привилегии «SELECT», вы можете предоставить любые другие привилегии из следующего списка:
- CREATE — разрешает пользователю создавать новые таблицы в базе данных (если выдаётся для одной базы данных), либо разрешает пользователю создавать новые базы данных (если при выдаче привилегии не указана конкретная база данных). Если пользователь получает данную привилегию, то он также получает права на использования запросов с «USE» и «SHOW TABLES;», хотя не может выполнять выражения с оператором «SELECT»
- DROP — разрешает пользователю удалять таблицы в базе данных (если выдаётся для одной базы данных), либо разрешает удалять сами базы данных (если при выдаче привилегии не указана конкретная база данных). Если пользователь получает данную привилегию, то он также получает права на использования запросов «USE» и «SHOW TABLES;», хотя не может выполнять оператор «SELECT»
- DELETE — разрешает пользователю удалять строки в таблицах
- INSERT — разрешает пользователю вставлять новые данные в таблицы
- SELECT — разрешает пользователю читать записи в базе данных
- UPDATE — разрешает пользователю обновлять существующие строки базы данных
- ALTER — разрешает пользователю использовать «ALTER TABLE» для изменения структуры таблицы
- REFERENCES — разрешает пользователю создавать foreign key
- INDEX — разрешает пользователю включать или удалять индексы
- CREATE VIEW — включает создание или изменение views
В одном запросе можно предоставить сразу несколько привилегий, перечислив их через запятую. Например, следующая команда применяет перечисленные привилегии для одной таблицы (замените «TestDB» на имя вашей базы данных, замените «TestTABLE» на имя вашей таблицы и замените «YOUR-USERNAME» на имя пользователя):
GRANT CREATE, DROP, DELETE, INSERT, SELECT, UPDATE, ALTER, REFERENCES ON TestDB.TestTABLE TO 'YOUR-USERNAME'@'localhost';
А следующая команда применяет перечисленные привилегии для всех таблиц указанной базы данных (замените «TestDB» на имя вашей базы данных и замените «YOUR-USERNAME» на имя пользователя):
GRANT CREATE, DROP, DELETE, INSERT, SELECT, UPDATE, ALTER, REFERENCES ON TestDB.* TO 'YOUR-USERNAME'@'localhost';
Как предоставить пользователю все привилегии на базу данных в MySQL (MariaDB)
Если вы хотите предоставить пользователю все возможные привилегии на базу данных, то используйте запрос вида (замените «TestDB» на имя вашей базы данных и замените «YOUR-USERNAME» на имя пользователя):
GRANT ALL PRIVILEGES ON TestDB.* TO 'YOUR-USERNAME'@'localhost';
Например:
GRANT ALL PRIVILEGES ON TestDB.* TO 'mial'@'localhost';
Как предоставить пользователю привилегии на базу данных с возможностью их передачи другим пользователям в MySQL (MariaDB)
Если вы хотите дать пользователю возможность передавать его привилегии другим пользователям, то добавьте к запросу «WITH GRANT OPTION». Например:
GRANT ALL PRIVILEGES ON TestDB.* TO 'mial'@'localhost' WITH GRANT OPTION;
Как проверить текущие привилегии пользователя
Чтобы проверить, какими привилегиями по чтению и изменению баз данных обладает пользователь выполните следующий запрос (замените «YOUR-USERNAME» на имя пользователя):
SHOW GRANTS FOR 'YOUR-USERNAME'@'HOST';
Например:
SHOW GRANTS FOR 'mial'@'localhost';
Связанные статьи:
- Как разрешить пользователю доступ только к определённым базам данных в MySQL (MariaDB) (99%)
- Как разрешить доступ пользователю только к определённым таблицам в MySQL (MariaDB) (99%)
- Как разрешить доступ пользователю только к определённым столбцам в MySQL (MariaDB) (99%)
- Как создать нового пользователя MySQL (MariaDB) и настроить его статус и права (99%)
- Ошибка «ERROR 1046 (3D000): No database selected» в MySQL и MariaDB (РЕШЕНО) (83.6%)
- PostgreSQL в Linux: рецепты популярных действий и решения проблем (RANDOM - 1%)