Перейти к содержимому

Как посмотреть пользователей в mysql

  • автор:

Как посмотреть список пользователей базы MySQL

Для того, чтобы посмотреть список пользователей MySQL-базы, необходимо подключиться к ней как root (или как другой пользователь, наделенный административными правами) и выполнить команду:

  1. Войдите в командную строку MySQL.
  2. Выполните следующую команду:
    SELECT USER from mysql.user;
Остались вопросы?

Если у Вас что-то не получилось или остались вопросы по данной проблеме — обратитесь к автору и он Вам поможет.

Станьте одним из экспертов!

Мы будем рады видеть в своих рядах людей, которые могут поделиться своим опытом с другими!

Linux (любые дистрибутивы), MS Windows, Cisco, Python и многое другое.

Более чем 20-летний опыт в IT позволяет мне давать Вам мудрые советы.

�� Как посмотреть всех пользователей и привилегии в MySQL

Иконка MariaDB

Иногда нужно посмотреть всех пользователей, которых вы завели в MySQL и узнать их привилегии каждого из них.

Первым делом логинимся с учетной записью root в MySQL.

#mysql -uroot -p

Затем выбираем системную базу данных MySQL:

mysql>use mysql;

Далее выбираем все имена пользователей, которые у нас существуют:

mysql>select user from user;

В ответ на команду будут выведены все пользователи MySQL.

Для того, чтобы узнать привилегии пользователя в MySQL, используя консоль, выполняем:

mysql>show grants for %username%;

где вместо %username% подставляем нужное нам имя пользователя и получаем привилегии данного пользователя.

Список описанных опций можно найти в документации.

�� Похожие статьи на сайте

  • Шпаргалка основных команд mysql по работе с базой данных и таблицам
  • Настройка удаленного доступа MySQL и MariaDB в Linux Ubuntu
  • Процесс создания базы MySQL, нового пользователя и загрузки дампа
  • Как посмотреть всех пользователей и привилегии в MySQL
  • Проверка, восстановление и оптимизация баз MySQL
  • Установка Nginx, MariaDB и PHP-FPM на Ubuntu 16.04
  • Как полностью удалить MySQL из Ubuntu
  • Удаление всех таблиц из базы MySQL
  • Установка сервера percona
  • Установка Nginx+php5-fpm+MariaDB на Ubuntu 14.04
  • Дампы баз данных MySql — mysqldump
  • Перенос баз данных MySQL
  • Защита phpMyAdmin

Как показать / составить список пользователей в MySQL

Вам когда-нибудь нужно было получить список всех пользователей на вашем сервере MySQL? Есть команды для отображения баз данных и таблиц, но нет команды MySQL show users .

В этом руководстве объясняется, как вывести список всех учетных записей пользователей на сервере базы данных MySQL с помощью командной строки. Мы также покажем вам, как узнать, какие пользователи имеют доступ к данной базе данных.

Подготовка

Мы предполагаем, что в вашей системе уже установлен сервер MySQL или MariaDB.

Все команды выполняются внутри оболочки MySQL от имени пользователя root. Чтобы получить доступ к оболочке MySQL, введите следующую команду и при появлении запроса введите пароль root-пользователя MySQL:

mysql -u root -p

Если вы не установили пароль для своего пользователя root MySQL, вы можете опустить опцию -p .

Если вы забыли свой пароль root для MySQL, вы можете сбросить его, следуя этим инструкциям .

Показать всех пользователей MySQL

MySQL хранит информацию о пользователях в таблице с именем user в базе данных mysql .

Чтобы получить список всех учетных записей пользователей MySQL, используйте SELECT для извлечения всех строк из таблицы mysql.users :

SELECT User, Host FROM mysql.user;

Результат должен выглядеть примерно так:

+------------------+-----------+ | user | host | +------------------+-----------+ | root | localhost | | luke | % | | yoda | % | | jabba | 10.10.0.6 | | jabba | 10.10.0.9 | | chewbacca | localhost | | leia | localhost | | han | localhost | +------------------+-----------+ 8 rows in set (0.00 sec) 

Приведенная выше команда показывает только два столбца из таблицы mysql.user ( User и Host ). Эта таблица содержит более 40 столбцов, таких как Password , Select_priv , Update_priv и т. Д.

Учетная запись пользователя в MySQL состоит из двух частей: имени пользователя и имени хоста.

Используйте команду desc mysql.user; оператор для отображения информации о столбцах таблицы. Узнав имя столбца, вы можете запустить запрос к выбранным данным.

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

SELECT User, Host, Password, password_expired FROM mysql.user;
+----------------+-----------+-------------------------------------------+------------------+ | User | Host | Password | password_expired | +----------------+-----------+-------------------------------------------+------------------+ | root | localhost | | N | | luke | % | *ADC3B5B27617732CD6320A2DA976258E149A7EC8 | N | | yoda | % | *9550E004046348198A143A115550E1262209FB6F | N | | jabba | 10.10.0.6 | *F91C86B486B945C083B61A05FF6E197560D187EC | Y | | jabba | 10.10.0.9 | | Y | | chewbacca | localhost | *17F2B1E48029294841AD66772BEBB7E6E6A005AF | N | | leia | localhost | *74409C8DB55AC1A6829D801915981C46EDBFC64A | N | | han | localhost | *7B3022FCAEC3534CE67C68322D8AF0C240D95745 | N | +----------------+-----------+-------------------------------------------+------------------+ 8 rows in set (0.00 sec) 

Показать пользователей, имеющих доступ к конкретной базе данных

Информация о привилегиях уровня базы данных хранится в таблице mysql.db .

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

Например, чтобы получить список всех пользователей, имеющих некоторый уровень доступа к базе данных с именем db_name вы должны использовать следующий запрос:

SELECT * FROM mysql.db WHERE Db = 'db_name'G;
*************************** 1. row *************************** Host: localhost Db: db_name User: db_user Select_priv: Y Insert_priv: Y Update_priv: Y Delete_priv: Y Create_priv: Y Drop_priv: Y Grant_priv: N References_priv: Y Index_priv: Y Alter_priv: Y Create_tmp_table_priv: Y Lock_tables_priv: Y Create_view_priv: Y Show_view_priv: Y Create_routine_priv: Y Alter_routine_priv: Y Execute_priv: Y Event_priv: Y Trigger_priv: Y 1 row in set (0.00 sec) 

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

SELECT db, host, user FROM mysql.db WHERE db = 'db_name'
+---------+-----------+---------+ | db | host | user | +---------+-----------+---------+ | db_name | localhost | db_user | +---------+-----------+---------+ 

Следующий запрос покажет вам информацию обо всех базах данных и связанных пользователях:

SELECT db, host, user FROM mysql.db;
+------------------+-----------+-----------+ | db | host | user | +------------------+-----------+-----------+ | db_name | localhost | db_user | | ghost_production | localhost | chewbacca | | blog_db | localhost | leia | | linuxize | localhost | han | +------------------+-----------+-----------+ 

Выводы

В этом руководстве мы показали, как получить список всех пользователей MySQL и узнать, какие пользователи имеют доступ к конкретной базе данных.

Не стесняйтесь оставлять комментарии, если у вас есть вопросы.

Создание нового пользователя и настройка прав в MySQL

Как работать с пользователями в MySQL: создавать и удалять учетные записи, предоставлять и отзывать привилегии, а также просматривать права доступа.

Эта инструкция — часть курса «MySQL для новичков».

Смотреть весь курс

Введение

В статье речь пойдет о работе с пользователями открытой реляционной системы управления базами данных (СУБД) MySQL, появившейся в 1994 году. В 2008 году Sun Microsystems купил MySQL AB, а в 2010 уже Sun была поглощена Oracle. Эти продажи побудили авторов исходной СУБД создать форк — MariaDB, свободный от лицензионных ограничений текущего владельца и совместимый с Oracle MySQL. Помимо «Марии» известен другой форк, Percona, — от Петра Зайцева и Вадима Ткаченко. Оба форка совместимы с MySQL.

БД от Percona обладает дополнительными функциями, направленными на повышение производительности. Многие дистрибутивы (например, Red Hat) перешли на MariaDB из-за предсказуемой лицензионной политики. В своих проектах автор использует MariaDB.

Есть несколько способов работы с БД MySQL: через графические phpMyAdmin, MySQL WorkBench и т.д.

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

Для этого понадобится минимум — консольный клиент mysql. Запускать его можно на своей рабочей станции (mysql —host= [—user=] [—password=] [database]) или через ssh на самом сервере (в случае ОС Linux).

Зачем нужны пользователи

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

Администратору MariaDB в работе требуется создавать учетные записи «обычных» пользователей с ограниченным доступом к данным, определять права доступа, при необходимости — создавать дополнительных (привилегированных) суперпользователей. Также важно проводить аудит — просматривать выданные полномочия и корректировать их по мере необходимости.

Пользователи MySQL

Имя пользователя MySQL

В MySQL имя пользователя состоит из 2-х частей: имени пользователя (обязательно) и хоста (может быть опущена, тогда она означает ‘%’):

‘someuser’@’somehost’, аналогично, почтовому адресу.

Поняв это правило, посмотрим, как по умолчанию выглядит суперпользователь. На самом деле полностью учетка записывается трижды: ‘root’@’localhost’, ‘root’@’127.0.0.1’ и ‘root’@’::1’ с одинаковым парольным хешем.

В хостовой части могут использоваться DNS-имена, IP-адреса и символ подстановки %, обозначающий любой (любые) символы.

Примеры записи хоста:

somehost.example.com localhost 127.0.0.1 ::1 192.168.123.% 192.168.123.0/255.255.255.0 %

Примечание: имена и адреса следует указывать в том формате, в каком возвращает системный DNS resolver сервера.

Просмотр всех пользователей

Давайте проверим, какие пользователи есть в нашей БД. Выведем основную информацию о пользователях:

SELECT host, user, password, password_expired FROM mysql.user;

Когда список получается большим, мы можем добавить фильтр (в примере — по хостам, начинающимся с msk):

SELECT host, user, password FROM mysql.user WHERE host LIKE 'msk%';

Или использовать в конце модификатор \G, оптимизирующий вывод для отображения в консоли:

SELECT host, user, password FROM mysql.user\G;
SELECT * FROM mysql.user[\G];

Создание нового пользователя MySQL

Новый пользователь в MySQL добавляется командой:

CREATE USER 'some_user'@'somehost.somedomain' IDENTIFIED BY 'some_password';

Теперь давайте создадим нашего первого пользователя:

CREATE USER 'test'@'localhost' IDENTIFIED BY 'secret'; FLUSH PRIVILEGES;

Полезная возможность — добавление комментария:

CREATE USER 'test'@'localhost' COMMENT 'My 1st user for app';

FLUSH PRIVILEGES

Обратите внимание на эту команду: она дает серверу команду перечитать привилегии. Как следует из документации, команда FLUSH PRIVILEGES в MySQL нужна только в случае прямой модификации таблиц привилегий MySQL операторами типа INSERT, UPDATE или DELETE. Но для простоты запоминания будем указывать ее и для «правильных» операторов таких как GRANT, REVOKE, SET PASSWORD и RENAME USER, как в примере выше и остальных, используемых в статье.

Удаление пользователя MySQL

Для удаления пользователя используется команда

DROP USER 'some_user'@'somehost.somedomain';

На нашем предыдущем примере:

DROP USER 'test'@'localhost'; FLUSH PRIVILEGES;

Создание дополнительного суперпользователя

Это не лучшая практика, но бывают ситуации, когда у СУБД несколько хозяев и всем нужно быть суперпользователями. В MySQL добавить пользователя с root-правами можно так:

GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;

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

Отзыв полномочий у пользователя

Команда отзыва привилегий функционально обратна GRANT, “TO” заменяется на “FROM”:

REVOKE SELECT ON `somedb`.* FROM 'someuser'@'somehost'; REVOKE ALL PRIVILEGES ON `somedb`.* FROM 'someuser'@'somehost'; REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'someuser'@'somehost';

Смена пароля

Для изменения пароля учетной записи пользователя применяется команда ALTER USER:

ALTER USER 'test_user'@'localhost' IDENTIFIED BY 'new_password';

Предоставление доступа пользователю MySQL

Доступ предоставляется командой:

GRANT SELECT ON `some_db`.* TO 'some_user'@'somehost.somedomain'; FLUSH PRIVILEGES;

Допустим, наше ПО использует базу данных test_db. Для его работы мы создали пользователя test_user, а FQDN хоста, где работает ПО — наш локальный хост (localhost). Наше приложение только считывает данные из БД — выполняет SELECT.

Создадим пользователя и БД (часто БД называют схемой, в терминах MySQL):

CREATE SCHEMA test_DB; CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'secret';

Команда для предоставления доступа будет выглядеть так:

GRANT SELECT ON `test_db`.* TO 'test_user'@'localhost'; FLUSH PRIVILEGES;

Наследование привилегий

В предыдущем примере наш пользователь сможет только читать данные из базы test_db, но передать свои права другому пользователю не сможет. Используя GRANT OPTION, мы можем позволить ему сделать это. Тогда пользователь получит возможность передавать другим то, что разрешено ему самому.

GRANT SELECT, INSERT, UPDATE, DELETE ON `some_db`.* TO 'some_user'@'somehost' WITH GRANT OPTION;

В этом примере some_user может поделиться правами на SELECT, INSERT, UPDATE, DELETE для базы some_db.

Из соображений безопасности использовать GRANT OPTION небезопасно! В случае компрометации учетной записи злоумышленник сможет не только получить доступ к данным, но и сделать закладку в виде копии учетной записи.

Доступ к таблице

Примеры выше дают доступ ко всей БД. Часто доступ должен быть ограничен строго определенным набором таблиц:

GRANT SELECT ON `test_db`.`table_users` TO 'test_user'@'localhost';

Выполнение команды приведет к ошибке, т.к. этой таблицы еще нет.

CREATE TABLE `test_db`.`table_users` (id INT AUTO_INCREMENT PRIMARY KEY, user_name VARCHAR(16) NOT NULL, password VARCHAR(32));

и повторим предоставление доступа:

GRANT SELECT ON `test_db`.`table_users` TO 'test_user'@'localhost';

Доступ к столбцу

Предоставляется перечислением столбцов:

GRANT SELECT (id, user_name), UPDATE (user_name) ON `test_db`.`table_users` TO 'test_user'@'localhost';

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

Просмотр привилегий пользователей MySQL

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

Проверка текущих полномочий пользователя

Нам пригодится команда:

SHOW GRANTS FOR 'someuser'@'somehost.somedomain';
SHOW GRANTS FOR 'appuser'@'srv14.example.com'; +--------------------------------------------------------------------------------------------------------------------------------+ | Grants for appuser@srv14.example.com | +--------------------------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'appuser'@'srv14.example.com' IDENTIFIED BY PASSWORD '*F4E0A7F0B10264F70558CF07A4ABD4E041182D6E' | | GRANT SELECT ON `net_database`.* TO 'appuser'@'srv14.example.com' | +--------------------------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec)

Проверка полномочий к данным

Через read-only БД information_schema доступно множество метаданных — системной информации. Информация о доступе на БД (схемы), таблицы и столбцы доступны в таблицах schema_privileges, table_privileges и column_privileges. Работа с ними — обычные SQL-запросы:

SELECT * FROM information_schema.schema_privileges; SELECT * FROM information_schema.table_privileges; SELECT * FROM information_schema.column_privileges; SELECT * FROM information_schema.column_privileges WHERE GRANTEE="'test_user'@'localhost'";
MariaDB [information_schema]> select * from information_schema.column_privileges WHERE GRANTEE="'test_user'@'localhost'"; +-------------------------+---------------+--------------+------------+-------------+----------------+--------------+ | GRANTEE | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | PRIVILEGE_TYPE | IS_GRANTABLE | +-------------------------+---------------+--------------+------------+-------------+----------------+--------------+ | 'test_user'@'localhost' | def | test_db | table_usr | id | INSERT | NO | | 'test_user'@'localhost' | def | test_db | table_usr | user_name | UPDATE | NO | +-------------------------+---------------+--------------+------------+-------------+----------------+--------------+ 2 rows in set (0.001 sec)

Просмотр привилегий через системную БД mysql

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

Информация о пользователях:

SELECT * FROM mysql.user;

Привилегии на базы данных:

SELECT * FROM mysql.db;

Права, назначенные на таблицы:

SELECT * FROM mysql.tables_priv;
 SELECT * FROM mysql.columns_priv;

Просмотр глобальных привилегий

Глобальные полномочия смотрим здесь:

SELECT * FROM information_schema.user_privileges;

Заключение

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

При выдаче прав избегайте избыточности. Права не нужно выдавать с запасом, часто выполнение GRANT ALL PRIVILEGES ON *.* TO ‘myUser’@’%’ — не лучший выход. Другой важный момент, часто упускаемый из виду новичками, — наличие в имени хостовой части. Игнорирование хоста может привести к ошибкам.

Всем высоких скоростей, безаварийной работы и долгого аптайма!

Как создавать таблицы в MySQL (Create Table)

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

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