Права и привилегии пользователей субд mysql

Privilege Restrictions on DigitalOcean’s MySQL Managed Databases

By default, MySQL database clusters come with a user, , which has full access to every database you create. Instead of using to access the database, we recommend creating additional users who have only the privileges they need, following the principle of least privilege.

MySQL sets privileges based on account names, which consist of a user name and a host name in the format . You can specify the host by name (), IP address (), or using wildcard characters (, 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 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 . After you create a user in the cluster, connect to the cluster as or another admin user. From here, the commands you need to execute depend on the permissions you want the user to have.

Step 3: Granting users other types of permissions in MySQL

In the section above we saw how to grant read permissions to the user by using the keyword SELECT. In this section, we will explore other keywords that will allow us to set various types of permissions on the user.

  • USAGE – gives the user permission to log in to the MySQL server(given by default when creating a new user)
  • SELECT – gives the user permission to use the select command to fetch data from tables
  • INSERT – gives the user permission to add new rows into tables
  • UPDATE – gives the user permission to modify the existing rows in tables
  • DELETE – gives the user permission to delete existing rows from tables
  • CREATE – gives the user permission to create new tables or databases
  • DROP – gives the user permission to remove existing tables or databases
  • ALL PRIVILEGES – gives the user permission to have unrestricted access on a database or the whole system(by using an asterisk in the database position)
  • GRANT OPTION – gives the user permission to grant or remove other users’ permissions

Granting Privileges

To grant all privileges on a specific database to a user, you can use the following commands:

Note

You cannot create additional admin users. However, you can give a user full access to all databases you’ve created by running the command for each database.

To grant a user administrative privileges for a specific database, you must also give them the privilege. Here’s an example:

To grant a user only read privileges on a database, you can use the following command:

To grant a user privileges on only a specific table in a database, you can use the following command:

Granting additional privileges to a user does not remove any existing privileges. To , use the command.

Creating roles

Suppose you develop an application that uses the database. To interact with the database, you need to create accounts for developers who need full access to the database. In addition, you need to create accounts for users who need only read access and others who need both read/write access.

To avoid granting privileges to each user account individually, you create a set of roles and grant the appropriate roles to each user account.

To create new roles, you use statement:

The role name is similar to the user account that consists of two parts: the name and host:

If you omit the host part, it defaults to ‘%’ that means any host.

Настройка Базы Данных

Создание Базы Данных

Мы вошли и приглашение mysql показано на экране. Сначала, давайте рассмотрим базы данных, которые у нас имеются в настоящий момент. Чтобы это сделать, мы используем команду .

+----------+
| Database |
+----------+
| mysql    |
| test     |
+----------+
2 rows in set (0.09 sec)

ВажноПожалуйста, запомните что команды MySQL должны оканчиваться точкой с запятой —

Вопреки тому факту, что тестовая база данных уже создана, мы собираемся создать нашу собственную. Базы данных создаются с использованием команды . Мы создадим одну из них под названием gentoo.

Query OK, 1 row affected (0.08 sec)

Ответ позволяет нам узнать, что команда была выполнена без ошибок. В этом случае, одна строка была изменена. Это является отсылкой к основной базе данных mysql, которая содержит список всех баз данных. Вам не нужно сильно беспокоиться о второстепенных деталях. Последнее число является характеристикой того, насколько быстро был выполнен запрос. Мы можем проверить, что база данных была создана, запустив команду снова.

+----------+
| Database |
+----------+
| gentoo   |
| mysql    |
| test     |
+----------+
3 rows in set (0.00 sec)

В самом деле, наша база данных была создана. Для того чтобы работать с созданием таблиц для нашей новой базы данных gentoo, нам надо выбрать ее в качестве текущей базы данных. Чтобы это сделать, мы используем команду . Команда принимает имя базы данных, которую вы хотите использовать в качестве текущей. Другой возможностью является ее установка в командной строке после параметра . Давайте продолжим и переключимся к базе данных gentoo.

Database changed

Сейчас, текущей базой данных является созданная нами ранее база данных gentoo. Теперь, когда мы ей пользуемся, мы можем начать создавать таблицы и заполнять их информацией.

Assigning roles to user accounts

Suppose you need one user account as the developer, one user account that can have read-only access and two user accounts that can have read/write access.

To create new users, you use statements as follows:

To assign roles to users, you use statement.

The following statement grants the role to the user account :

The following statement grants the role to the user account :

The following statement grants the and roles to the user accounts and :

To verify the role assignments, you use the statement as the following example:

The statement returned the following result set:

As you can see, it just returned granted roles. To show the privileges that roles represent, you use the clause with the name of the granted roles as follows:

The statement returns the following output:

Начало работы с MySQL

Введение

MySQL — это популярный сервер баз данных, используемый в разных приложениях. SQL означает язык структурированных запросов — (S)tructured (Q)uery (L)anguage, который MySQL использует для коммуникации с другими программами. Сверх того, MySQL имеет свои собственные расширенные функции SQL для того чтобы обеспечить пользователям дополнительный функционал. В этом документе мы рассмотрим как провести первоначальную установку MySQL, настроить базы данных и таблицы, и создать новых пользователей. Давайте начнем с установки.

Установка MySQL

Сначала убедитесь что MySQL установлен на вашу систему. В случае если вам требуется определенная функциональность MySQL, убедитесь, что установлены необходимые USE-флаги, так как они помогут в тонкой настройке инсталляции.

По завершении установки, вы увидите следующее уведомление:

Код Сообщение einfo MySQL

You might want to run:
"emerge --config =dev-db/mysql-"
if this is a new install.

Так как это новая установка, мы запустим эту команду. Вам надо нажать по запросу во время конфигурации базы данных MySQL. В процессе конфигурации устанавливается основная база данных MySQL, которая содержит служебную информацию, такую как базы данных, таблицы, пользователи, разрешения и т.д. В процессе конфигурации рекомендуется чтобы вы изменили свой пароль root так быстро, как это возможно. Мы определенно это сделаем, иначе кто-нибудь сможет волей случая появиться и взломать сервер MySQL, настроенный по умолчанию.

 * MySQL DATADIR is /var/lib/mysql
 * Press ENTER to create the mysql database and set proper
 * permissions on it, or Control-C to abort now...
 
   Preparing db table
   Preparing host table
   Preparing user table
   Preparing func table
   Preparing tables_priv table
   Preparing columns_priv table
   Installing all prepared tables
 
   To start mysqld at boot time you have to copy support-files/mysql.server
   to the right place for your system
 
   PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
   To do so, issue the following commands to start the server
   and change the applicable passwords:
 
   /etc/init.d/mysql start
   /usr/bin/mysqladmin -u root -h pegasos password 'new-password'
   /usr/bin/mysqladmin -u root password 'new-password'
   Depending on your configuration, a -p option may be needed
   in the last command. See the manual for more details.

ЗаметкаЕсли предыдущая команда не выполнится из-за того, что имя хоста установлено в localhost, измените его на другое имя, например gentoo. Обновите файл /etc/conf.d/hostname и перезапустите /etc/init.d/hostname.

Некоторая нехарактерная для ebuild-файлов информация MySQL удалена отсюда, чтобы содержать этот документ настолько последовательным, насколько возможно.

ВажноНачиная с mysql-4.0.24-r2, пароли вводятся во время этапа конфигурации, что делает пароль root более надежным.

Сценарий конфигурации уже вывел команды, которые нам нужно запустить, чтобы настроить наш пароль, поэтому нам сейчас надо их выполнить.

Если вы используете OpenRC, выполните данную команду:

 * Re-caching dependency info (mtimes differ)...
 * Starting mysqld (/etc/mysql/my.cnf) ...        

Если вы используете systemd, вместо этого используйте следующую команду:

После этого установите пароль root:

Теперь вы можете проверить, что пароль root был успешно настроен, попытавшись войти на MySQL-сервер:

Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 4.0.25
 
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 
mysql>

Параметр указывает пользователя, который будет выполнять вход. Параметр указывает хост. Обычно это будет , если только вы не настраиваете удаленный сервер. И, наконец, сообщает клиенту mysql что вы будете вводить пароль для доступа к базе данных

Обратите внимание на приглашение. Это то место, где вы будете вводить все ваши команды

Теперь, когда мы в командной строке mysql в качестве пользователя root, мы можем начать настраивать нашу базу данных.

ВажноУстановка mysql по умолчанию приемлема для систем разработки. Для более безопасных значений по умолчанию можно запустить /usr/bin/mysql_secure_installation

Создание пользователя 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

Не забудьте указать имя базы данных и имя таблицы, разделив их с помощью . (точки) и не используя пробелов.

Кроме того, замените значение ТИП_ПРАВ типом доступа, который вы хотите предоставить своему новому пользователю.

В MySQL есть несколько типов прав доступа, некоторые из них описаны ниже:

  • CREATE — Позволяет пользователям создавать базы данных/таблицы
  • SELECT — Разрешает делать выборку данных
  • INSERT — Право добавлять новые записи в таблицы
  • UPDATE — Позволяет изменять существующие записи в таблицах
  • DELETE — Даёт право удалять записи из таблиц
  • DROP — Возможность удалять записи в базе данных/таблицах

ОБРАТИТЕ ВНИМАНИЕ. Тип прав ALL PRIVILEGES даёт все перечисленные выше разрешения

Для использования любой из этих опций, просто замените ТИП_ПРАВ необходимым разрешением. Чтобы назначить несколько видов прав доступа, разделите их запятыми как в следующей команде. Например, мы можем назначить привилегии CREATE и SELECT нашему пользователю MySQL без полномочий root следующей командой:

GRANT  ON . TO ‘imia_polzovatelia’@'localhost’;
GRANT CREATE, SELECT ON * . * TO 'imia_polzovatelia'@'localhost';

Иногда вы можете столкнуться с ситуацией, когда вам нужно отменить определенные привилегии пользователя. Сделать это можно, выполнив следующую команду:

REVOKE ТИП_ПРАВ ON имя_базы_данных.имя_таблицы FROM ‘imia_polzovatelia’@‘localhost’;

Чтобы отозвать все права доступа пользователя без полномочий root, используйте команду:

REVOKE ALL PRIVILEGES ON *.* FROM 'imia_polzovatelia'@'localhost';

Наконец, вы можете полностью удалить существующую учётную запись пользователя, используя команду:

DROP USER ‘imia_polzovatelia’@‘localhost’;

ОБРАТИТЕ ВНИМАНИЕ. Для запуска любой из этих команд вам необходим root-доступ

Также, обязательно выполняйте FLUSH PRIVILEGES; Команда после внесения изменений.

MySQL Show Users Command

We’ll just to query the User table to show all MySQL Users with the following command:

SELECT User, Host, Password FROM mysql.user;

The list of all MySQL users should be similar to the one below:

+------------------+--------------+--------------+
| user             | host         | password     |
+------------------+--------------+--------------+
| root             | localhost    | 37as%#8123fs |
| debian-test-user | localhost    | HmBEqPjC5Y   |
| johnsm           | localhost    |              |
| brian            | localhost    |              |
| root             | 111.111.111.1|              |
| guest            | %            |              |
| adrianr          | 10.11.12.13  | RFsgY6aiVg   |
+------------------+--------------+--------------+
7 rows in set (0.01 sec)

If you want to add more columns or exclude some, just edit the command with the columns you need. You may only need the names of the users, so you can use

Another way to see all users is to simply use the asterisk (*) wildcard when selecting fields from the user table. It should look like this:

SELECT * FROM mysql.user;

This will return all possible field information for each user. Be aware that the number of fields is typically very long/extensive, so the output likely won’t be readable and you probably don’t need all of the information available for each user. This is why we suggest specifying the field names, that way the output will be easily readable, and you’ll only see the information that you need.

Some of the fields are related to privileges and permissions that each user has (such as “Insert_priv” or “Drop_priv”), and some fields are for the general properties of the user account, such as “max_connections” or “max_updates”.

What is a MySQL user?

MySQL databases lie in the basis of content-driven websites and their security is of highest importance to website owners. The management of MySQL databases is usually executed through third-party programs such as phpMyAdmin, which ensures a quick and easy database administration process. Although using phpMyAdmin is of great help to developers, they are also recommended to be familiar with the MySQL command line and basic MySQL management commands like create/delete users.

In MySQL the USER is actually a record in the ‘USER’ table of the MySQL server which contains the login information (username and password), the corresponding account privileges, and the host information for a MySQL account.

Что Такое База Данных MySQL?

Чтобы понять MySQL, вам нужно знать, что такое база данных. БД — это виртуальное хранилище, где вы можете сохранять необходимые данные для создания сайтов и веб-приложений.

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

Однако хранимые данные должны быть организованны в определённом порядке. Вот почему у нас есть системы управления базами данных. Эти инструменты используются для связи с базой данных и позволяют разработчикам структурировать, хранить, создавать и изменять данные.

MySQL — одна из самых популярных систем управления базами данных. Её популярность объясняется простотой использования и поддержкой огромного сообщества. Даже такие платформы, как и , в некоторой степени используют MySQL.

Сброс пароля для root

При необходимости, мы можем сбросить пароль для суперпользователя mysql. Для этого необходимо запустить сервер баз данных в безопасном режиме и ввести команду на смену пароля.

Для начала необходимо остановить сервис:

systemctl stop mysql

… или:

systemctl stop mariadb

Создаем каталог /var/run/mysqld и зададим для него нужные права:

mkdir -p /var/run/mysqld

chown mysql:mysql /var/run/mysqld

* в некоторых системах данного каталога может не быть, однако, для безопасного режима mysql он необходим.

Запускаем в безопасном режиме СУБД:

mysqld_safe —skip-grant-tables &

Запускаем оболочку sql — система не потребует пароль:

mysql -uroot

Меняем пароль запросов sql в базе mysql:

> use mysql;

> UPDATE user SET authentication_string=PASSWORD(«new_password») WHERE User=’root’;

> FLUSH PRIVILEGES;

> quit

Уничтожаем процесс, который запустили ранее:

kill %1

После, запускаем mysql в нормальном режиме:

systemctl start mysql

… или:

systemctl start mariadb

MySQL Users Information

You can see all the fields in the mysql.user table including description by running this MySQL query.

mysql> desc mysql.user;

Which will output a table like this.

mysql> desc mysql.user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(16)                          | NO   | PRI |                       |       |
| Password               | char(41)                          | NO   |     |                       |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N                     |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| File_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| References_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N                     |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N                     |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N                     |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |                       |       |
| ssl_cipher             | blob                              | NO   |     | NULL                  |       |
| x509_issuer            | blob                              | NO   |     | NULL                  |       |
| x509_subject           | blob                              | NO   |     | NULL                  |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0                     |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0                     |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0                     |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0                     |       |
| plugin                 | char(64)                          | YES  |     | mysql_native_password |       |
| authentication_string  | text                              | YES  |     | NULL                  |       |
| password_expired       | enum('N','Y')                     | NO   |     | N                     |       |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
43 rows in set (0.00 sec)

If you have any additional questions on how to show all users in MySQL, feel free to ask us through below comment box.

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

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

Adblock
detector