MySQL работа с пользователи

Опубликовано:

Пользователи MySQL
Все пользователи MySQL хранятся в таблице user базы mysql.
Чтобы посмотреть список пользователей нужно переключиться на базу mysql и сделать выборку с помощью команды select:

mysql> use mysql;
mysql> select user,host from user;
+--------------------+------------+
| user               | host       |
+--------------------+------------+
| root               | 127.0.0.1  |
| root               | testhost   |
| debian-sys-maint   | localhost  |
| root               | localhost  |
+--------------------+------------+

Из списка видно, что в базе имеются учетные данные суперпользователя root с возможностью подключаться только локально с данного сервера(адреса 127.0.0.1, localhost и имя сервера testhost).
Еще есть системная учетная запись debian-sys-maint служит для внутренних системных целей СУБД MySQL.

В предыдущей части я рассказывал как настроить в конфигурационном файле /etc/mysql/my.cnfудаленное подключение к серверу баз данных MySQL.
Напомню: для этого в параметре bind-address выставляется IP адрес 0.0.0.0 вместо 127.0.0.1, т.е. демон mysqld будет слушать не только локальный интерфейс 127.0.0.1, а все адреса имеющиеся на сервере.
В этой части я расскажу как создать пользователя mysql, какие права выдать для различных пользователей, как выставить пароль и хост с которого будет производиться подключение.

Пользователь для веб сайта
Обычно различные веб приложения которые хранят информацию в базе mysql требуют создать отдельную учетную запись. Создадим пользователя website-user от имени которого будет работать наше веб приложение.
Пользователя можно создать через команду create user, а потом выдать права  grant select,insert..., но удобнее и быстрее сразу воспользоваться командой grant

mysql> GRANT SELECT,INSERT,UPDATE,ALTER,DELETE,CREATE,DROP,INDEX ON website.* to 'website-user'@'localhost' IDENTIFIED BY 'website-PASSWORD;
mysql> flush privileges;

Здесь я сразу указал:

  •  выдать права GRANT SELECT,INSERT,UPDATE,ALTER,DELETE,CREATE,DROP,INDEX (возможно для вашего веб приложения список прав будет иной, обратитесь к документации веб приложения);
  • на базу website.* — имя базы указывается по маске (все файлы с названием website). Здесь можно указать *.*, тогда пользователь будет иметь права на все базы;
  • 'websiteuser'@'localhost' — имя пользователя, и хост с которого этот пользователь может подключаться в базу;
  • IDENTIFIED BY 'website-password' — указываем пароль пользователя.

Администратор баз данных
В следующем примере создадим учетную запись администратора баз данных который будет подключаться с  IP адреса компьютера администратора 192.168.8.10

mysql> create user 'admin'@'192.168.8.10' identified by 'blahblahblah';
Query OK, 0 rows affected (0.01 sec)

Выдадим полные права пользователю admin на базу website:

mysql> grant all on website.* to 'admin'@'192.168.8.10';
mysql> flush privileges;

Теперь администратор может подключиться со своего компьютера к серверу баз данных. В этом примере я использовал команду create user, а уже потом grant в принципе разницы нет как будут создаваться пользователи.

Пользователь backup
Создадим пользователя backup для резервного копирования всех базы данных

mysql> GRANT SHOW DATABASES, SELECT, LOCK TABLES, RELOAD ON on *.* to 'backup'@'%' identified by 'backup-password';
mysql> flush privileges;
  • GRANT SHOW DATABASES, SELECT, LOCK TABLES, RELOAD — Здесь я указал необходимый набор прав для удаленного резервного копирования и в то же время достаточный для безопасного бэкапа;
  • *.* — Пользователь backup может просматривать все базы;
  • 'backup'@'%' — пользователь backup может подключаться с любого IP адреса. Обычно не требуется разрешать подключения с любого ip для целей резервного копирования, так как у сервера backup всегда постоянный IP адрес.

Как поменять пароль?
Чтобы поменять пароль можно воспользоваться командой mysqladmin эту команду нужно запускать в bash.

mysqladmin -u website-user -p password NEWPASSWORD

А так же можно воспользоваться командой (SQL синтаксис) из консоли MySQL

mysql> update mysql.user set password=PASSWORD('123') where user='website-user';

или

GRANT USAGE ON БД.* TO website-user @localhost IDENTIFIED BY 'пароль';

Как сбросить пароль root?
Поменять пароль root можно всеми теми же командами, что и для обычного пользователя. Но вот что делать если вы забыли пароль рута или по каким-то причинам его утеряли, тогда проделаем следующие операции.

1) Останавливаем MySQL:

/etc/init.d/mysqld stop

2) Запускаем MySQL с особыми параметрами:

/usr/bin/mysqld_safe --skip-grant-tables --user=root &

3) Запускаем клиента MySQL:

mysql -u root

4) Выполняем запрос SQL:

UPDATE mysql.user SET Password=PASSWORD(`newpassword`) WHERE User=`root`;

где newpassword — новый пароль

5) Применяем изменения:

FLUSH PRIVILEGES;

6) Выходим из клиента MySQL:

exit

7) Перезапускаем MySQL сервер:

/etc/init.d/mysqld restart

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

mysql -uroot -p
<enter_mysql_root_pass>
CREATE DATABASE <DB_NAME>;
CREATE USER 'test'@'%' IDENTIFIED BY 'password';

Посмотрим существующих пользователей

SELECT user, host FROM mysql.user;

Дадим права пользователю test на чтение всех таблиц базы scada

GRANT SELECT ON scada.* TO test@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Дадим все права пользователю test на все таблицы базы scada

GRANT ALL PRIVILEGES ON scada.* TO 'my_user'@'localhost'
 IDENTIFIED BY 'my_password' WITH GRANT OPTION;

Для того чтобы выставить новому пользователю полные права на все базы данных используем следующую команду:

GRANT ALL PRIVILEGES ON *.* TO 'my_user'@'localhost'
 IDENTIFIED BY 'my_password' WITH GRANT OPTION;

Доступ к базе для данного пользователя возможен только с localhost. Если вы хотите дать ему доступ к базе с любого хоста, используете % вместо localhost:

GRANT ALL PRIVILEGES ON <DB_NAME>.* TO 'my_user'@'%'
  IDENTIFIED BY 'my_password' WITH GRANT OPTION;

Проверить права пользователя :

SHOW GRANTS FOR 'my_user'@'%';

Удаляются пользователи проще, чем создаются :). Например, если мы решим избавиться от пользователя ’my_user’

DROP USER 'my_user'@'localhost';

Дополнительные материалы:
MySQL полезные команды
MySQL работа с пользователи

Понравилась статья, расскажи о ней друзьям, нажми кнопку!