- How to Modify User Privileges in MySQL Databases
- Privilege Restrictions on DigitalOcean’s MySQL Managed Databases
- Granting Privileges
- Revoking Privileges
- Viewing Privileges
- Resources
- Создание пользователя MySQL
- Создание пользователя mysql
- 1. Как создать пользователя MySQL
- 2. Права пользователя MySQL
- 3. Удаление прав пользователя MySQL
- 4. Создание суперпользователя MySQL
- Выводы
How to Modify User Privileges in MySQL Databases
MySQL is an open source, object-relational database built with speed and reliability in mind. Its large and active developer community has created many third-party applications, tools, and libraries that expand MySQL’s functionality.
The privileges granted to a MySQL user determine what operations that user can perform. MySQL privileges are organized accordingly:
- Administrative privileges allow users to manage the operations of the MySQL server itself, including the privileges of other users. Also known as global privileges.
- Database privileges allow users to manage a specific database and all the objects within that database. These can be granted globally or just for specific databases.
- Database object privileges allow users to manage specific objects within databases. These privileges can be granted for specific objects within a database, for an entire database, or globally.
Privilege Restrictions on DigitalOcean’s MySQL Managed Databases
By default, MySQL database clusters come with a user, doadmin , which has full access to every database you create. Instead of using doadmin to access the database, we recommend creating additional users who have only the privileges they need, following the principle of least privilege.
Additionally by default, every database cluster is publicly accessible. To limit access, you can add trusted sources or manage user permissions by following this guide.
MySQL sets privileges based on account names, which consist of a user name and a host name in the format ‘user_name’@’host_name’ . You can specify the host by name ( ‘user_name’@’localhost’ ), IP address ( ‘user_name’@’198.51.100.1’ ), or using wildcard characters ( like %, as in ‘user_name’@’%’ , which matches all hosts). Learn more in MySQL’s documentation on specifying account names.
To ensure stability of the platform, DigitalOcean Managed MySQL Databases have some default restrictions on user privileges that cannot be changed. Users cannot insert or edit any of the following databases, but can select from them:
Users on DigitalOcean Managed MySQL Databases cannot insert, edit, or select from the information_schema database.
You can’t currently change a user’s privileges in the control panel, so to do so you need to use a command-line MySQL client like mysql . After you create a user in the cluster, connect to the cluster as doadmin or another admin user. From here, the commands you need to execute depend on the permissions you want the user to have.
Granting Privileges
To grant all privileges on a specific database to a user, you can use the following commands:
GRANT ALL ON example_database.* TO 'example_user'@'%';
You cannot create additional admin users. However, you can give a user full access to all databases you’ve created by running the GRANT ALL command for each database.
To grant a user administrative privileges for a specific database, you must also give them the GRANT OPTION privilege. Here’s an example:
GRANT ALL ON example_database.* TO 'example_user'@'%' WITH GRANT OPTION;
To grant a user only read privileges on a database, you can use the following command:
GRANT SELECT ON example_database TO 'example_user'@'%';
To grant a user privileges on only a specific table in a database, you can use the following command:
GRANT SELECT ON example_database TO 'example_user'@'%'; mysql> GRANT INSERT ON example_database.example_table TO 'example_user'@'%';
Granting additional privileges to a user does not remove any existing privileges. To remove existing privileges, use the REVOKE command.
Revoking Privileges
Revoking privileges is quite similar to granting them. To revoke a user’s privileges, use the revoke command syntax. For example, to revoke all privileges on a specific database, use the following command:
REVOKE ALL ON example_database FROM 'example_user'@'%';
If a user already has privileges and you want to revoke them but still allow the user to read the database, you can use the following command:
REVOKE ALL ON example_database FROM 'example_user'@'%'; mysql> GRANT SELECT ON example_database TO 'example_user'@'%';
Viewing Privileges
To see the privileges for the current user, you can use the SHOW GRANTS; command, and will see output similar to the following, which shows the default grants for the doadmin user:
SHOW GRANTS; +---------------------------------------------------------------------------------------------------------------------------------------------------+ | Grants for [email protected]% | +---------------------------------------------------------------------------------------------------------------------------------------------------+ | GRANT CREATE, DROP, PROCESS, SHOW DATABASES, REPLICATION CLIENT, CREATE USER, CREATE ROLE, DROP ROLE ON *.* TO "doadmin"@"%" WITH GRANT OPTION | | GRANT ROLE_ADMIN ON *.* TO "doadmin"@"%" WITH GRANT OPTION | | GRANT ALL PRIVILEGES ON "defaultdb".* TO "doadmin"@"%" WITH GRANT OPTION | | GRANT SELECT ON "mysql".* TO "doadmin"@"%" WITH GRANT OPTION | | GRANT SELECT ON "sys".* TO "doadmin"@"%" WITH GRANT OPTION | | GRANT SELECT ON "metrics_user_telegraf".* TO "doadmin"@"%" WITH GRANT OPTION | | GRANT SELECT ON "performance_schema".* TO "doadmin"@"%" WITH GRANT OPTION +---------------------------------------------------------------------------------------------------------------------------------------------------+ 7 rows in set (0.07 sec)
To view the grants for another user, you can use SHOW GRANTS while specifying the username:
SHOW GRANTS FOR 'example_user'; +--------------------------------------------------------------------------------------------------------------------------------------------------------+ | Grants for [email protected]% | +--------------------------------------------------------------------------------------------------------------------------------------------------------+ | GRANT CREATE, DROP, RELOAD, PROCESS, SHOW DATABASES, REPLICATION CLIENT, CREATE USER ON *.* TO "example_user"@"%" WITH GRANT OPTION | | GRANT ROLE_ADMIN ON *.* TO "example_user"@"%" WITH GRANT OPTION | | GRANT ALL PRIVILEGES ON "defaultdb".* TO "example_user"@"%" WITH GRANT OPTION | | GRANT SELECT ON "mysql".* TO "example_user"@"%" WITH GRANT OPTION | | GRANT SELECT ON "sys".* TO "example_user"@"%" WITH GRANT OPTION | | GRANT SELECT ON "metrics_user_telegraf".* TO "example_user"@"%" WITH GRANT OPTION | | GRANT SELECT ON "performance_schema".* TO "example_user"@"%" WITH GRANT OPTION | +--------------------------------------------------------------------------------------------------------------------------------------------------------+ 7 rows in set (0.00 sec)
Resources
For more information on MySQL privileges and how they work, see Privileges Provided by MySQL.
Создание пользователя MySQL
После того, как вы установили и настроили MySQL, вам необходимо создать базы данных, таблицы и пользователей. Конечно, вы можете сделать это от имени суперпользователя root, но это не безопасно. Да и большинство приложений не позволят вам такой вольности, например, Phpmyadmin не даст авториrзоваться от имени суперпользователя.
Поэтому для каждой базы данных нужно создавать отдельных пользователей и настраивать для них права. В этой статье мы рассмотрим, как выполняется создание пользователя mysql, а также настройка его прав.
Создание пользователя mysql
1. Как создать пользователя MySQL
Предположим, что база данных уже создана и называется test_database. Нам нужно открыть клиент базы данных. Для этого наберите в терминале:
Теперь можно работать. Для создания пользователя используется команда CREATE USER, её синтаксис такой:
CREATE USER ‘имя_пользователя’ @ ‘хост’ IDENTIFIED BY ‘пароль’ ;
Кроме имени пользователя, здесь нужно задать хост, с которого может авторизоваться этот пользователь. Здесь может быть доменное имя, IP-адрес, адрес подсети или знак «%», который означает все возможные хосты. Это очень удобно, потому что вы можете создать пользователя, к которому можно будет подключится только локально или настроить отдельно права для локального или удалённого пользователя.
Например, давайте создадим локального пользователя test_user с паролем password:
CREATE USER ‘test_user’@’localhost’ IDENTIFIED BY ‘password’;
Или можно создать пользователя, который будет доступен со всех хостов:
CREATE USER ‘test_user’@’%’ IDENTIFIED BY ‘password’;
Смотрим наших пользователей:
SELECT User,Host FROM mysql.user;
2. Права пользователя MySQL
Создать пользователя — это ещё далеко не всё, теперь нужно назначить ему права. Для этого используется команда GRAT. У неё такой синтаксис:
GRANT привилегии ON база_данных . таблица TO ‘ имя_пользователя ‘ @ ‘ хост ‘ ;
Здесь можем дать определённые привилегии для опредёленного пользователя к базе данных или таблице. Если нужно дать права для всех баз данных или таблиц, используйте вместо названия звездочку — «*». Вот основные права пользователя MySQL, которые вы можете использовать:
- ALL PRIVILEGES — все, кроме GRANT;
- USAGE PRIVILEGES — никаких привилегий;
- SELECT — делать выборки из таблиц;
- INSERT — вставлять данные в таблицу;
- UPDATE — обновлять данные в таблице;
- DELETE — удалять данные из таблицы;
- FILE — разрешает читать файлы на сервере;
- CREATE — создавать таблицы или базы данных;
- ALTER — изменять структуру таблиц;
- INDEX — создавать индексы для таблиц;
- DROP — удалять таблицы;
- EVENT — обработка событий;
- TRIGGER — создание триггеров.
Также доступны такие привилегии администрирования баз данных:
- GRANT — изменять права пользователей;
- SUPER — суперпользователь;
- PROCESS — получение информации о состоянии MySQL;
- RELOAD — позволяет перезагружать таблицы привилегий;
- SHUTDOWN — позволяет отключать или перезапускать базу данных;
- SHOW DATABASES — просмотр списка баз данных;
- LOCK TABLES — блокирование таблиц при использовании SELECT;
- REFERENCES — создание внешних ключей для связывания таблиц;
- CREATE USER — создание пользователей;
Чтобы дать права пользователю MySQL на обновление и добавление записей для базы данных test_database, выполните:
GRANT SELECT,UPDATE,INSERT ON test_database . * TO ‘test_user’@’localhost’;
Дальше дадим этому же пользователю все права над этой базой данных:
GRANT ALL PRIVILEGES ON test_database . * TO ‘test_user’@’localhost’;
Теперь посмотрим привилегии нашего пользователя:
SHOW GRANTS FOR ‘test_user’@’localhost’;
Мы видим, что для всех баз данных и таблиц привелегий нет, но зато есть все привилегии для базы данных test_database. Вот так это работает. После обновления прав пользователя необходимо обновить таблицу прав пользователей MySQL в памяти. Для этого выполните:
3. Удаление прав пользователя MySQL
Чтобы отозвать права у пользователя MySQL, используйте команду REVOKE вместо GRANT. Её синтаксис похож на GRANT:
REVOKE привилегии ON база_данных . таблица FROM ‘ имя_пользователя ‘ @ ‘ хост ‘ ;
Например, заберём все права на базу данных test_database у нашего пользователя:
REVOKE ALL PRIVILEGES ON test_database . * FROM ‘test_user’@’localhost’;
4. Создание суперпользователя MySQL
Если вам необходимо создать пользователя со всеми правами MySQL на замену для root, то можно использовать такую конструкцию:
GRANT ALL PRIVILEGES ON * . * TO ‘test_user’@’localhost’;
Даём все привилегии для пользователя test_user над всеми базами данными и всеми таблицами. Но наш пользователь не сможет давать права другим пользователям. Чтобы это исправить, нужно дать ему привилегию GRANT, а для этого используется такая команда:
GRANT ALL PRIVILEGES ON * . * TO ‘test_user’@’localhost’ WITH GRANT OPTION;
Теперь этот пользователь является суперпользователем для MySQL и, авторизовавшись от его имени в PhpMyAdmin, вы можете делать всё то же самое, что и с помощью root.
Выводы
В этой статье мы рассмотрели, как создать пользователя MySQL в Ubuntu или в любом другом дистрибутиве. Работа в командной строке с MySQL может показаться довольно сложной. Но сделать это надо всего один раз -после установки базы данных. А дальше можно выполнять все действия в Phpmyadmin.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.