zaLinux.ru

Как вывести список пользователей MySQL / MariaDB и их привилегии (с помощью клиента СУБД и PHP)


В этой заметке рассказано, с помощью каких запросов можно вывести список пользователей MySQL и MariaDB. В статье показано, как выполнять эти команды в строке запроса MySQL / MariaDB, а также с помощью PHP.

Вывод списка пользователей и их привилегий с помощью клиента СУБД

Запросы для вывода списка пользователей MySQL / MariaDB

Чтобы вывести список всех пользователей в MySQL / MariaDB, подключитесь к СУБД.

Например, подключение к MySQL / MariaDB от имени пользователя root с паролем:

mysql -u root -p
mariadb -u root -p

Подключение к MySQL / MariaDB от имени пользователя root без пароля:

mysql -u root
mariadb -u root

После этого выполните следующий запрос:

SELECT Host, User FROM mysql.user;

В столбце «User» вы увидите имена пользователей. Некоторые имена пользователей повторяются, поскольку MySQL и MariaDB поддерживают назначение привилегий для связки ХОСТ@ПОЛЬЗОВАТЕЛЬ.

Если вы хотите проверить, существует ли пользователь, то вы можете использовать запрос вида:

SELECT Host, User FROM mysql.user WHERE User='USERNAME';

Например:

SELECT Host, User FROM mysql.user WHERE User='zara';
SELECT Host, User FROM mysql.user WHERE User='slava';

Также вы можете использовать часть имени пользователя для поиска:

SELECT Host, User FROM mysql.user WHERE User LIKE 'za%';

Запросы для вывода привилегий пользователей MySQL / MariaDB

Обобщённая информация о привилегиях пользователя

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

SHOW GRANTS FOR 'USERNAME'@'HOST';

Например:

SHOW GRANTS FOR 'zara'@'localhost';

Смотрите также:

Детальная информация о привилегия пользователей

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

  • user: учётные записи пользователей, статические глобальные привилегии и другие непривилегированные столбцы.
  • global_grants: динамические глобальные привилегии.
  • db: привилегии уровня базы данных.
  • table_priv: привилегии на уровне таблицы.
  • columns_priv: привилегии на уровне столбца.
  • procs_priv: привилегии хранимой процедуры и функции.

Обычно вам не нужно напрямую ни считывать, ни изменять эти значения напрямую. Из изменения происходят опосредовано при использовании выражений CREATE USER, GRANT и REVOKE. Тем не менее получить детальную информацию вы можете именно из этих таблиц.

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

SELECT * FROM mysql.user WHERE User='USERNAME';

Например:


SELECT * FROM mysql.user WHERE User='root';

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

Если вы хотите вывести только определённые привилегии, то перечислите их. Например, чтобы узнать, имеет ли пользователь «zara» привилегии Select_priv и Insert_priv нужно выполнить следующий запрос:

SELECT Select_priv, Insert_priv FROM mysql.user WHERE User='zara';

Чтобы вывести значение привилегий Select_priv и Insert_priv для всех пользователей отправьте следующий запрос:

SELECT User, Select_priv, Insert_priv FROM mysql.user;


Полный перечень привилегий:

  • Select_priv
  • Insert_priv
  • Update_priv
  • Delete_priv
  • Create_priv
  • Drop_priv
  • Reload_priv
  • Shutdown_priv
  • Process_priv
  • File_priv
  • Grant_priv
  • References_priv
  • Index_priv
  • Alter_priv
  • Show_db_priv
  • Super_priv
  • Create_tmp_table_priv
  • Lock_tables_priv
  • Execute_priv
  • Repl_slave_priv
  • Repl_client_priv
  • Create_view_priv
  • Show_view_priv
  • Create_routine_priv
  • Alter_routine_priv
  • Create_user_priv
  • Event_priv
  • Trigger_priv
  • Create_tablespace_priv
  • Delete_history_priv

Смотрите также: https://dev.mysql.com/doc/refman/8.1/en/grant-tables.html

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

1. Выполните следующий запрос (замените «root» на желаемое имя пользователя):

mariadb -u root <<< 'SELECT * FROM mysql.user WHERE User="root";' > root.csv

В результате выполнения команды будет создан файл «root.csv», в который будет записан полученный от MySQL / MariaDB вывод.


2. Откройте файл «root.csv» с помощью LibreOffice Calc:

В качестве разделителей полей используется символ Tab, но LibreOffice Calc способен правильно отображать такие таблицы.

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

Вывод списка пользователей СУБД и их привилегий с помощью PHP

Вывод списка пользователей MySQL / MariaDB в PHP

Следующий PHP код выведет список пользователей в формате «ХОСТ@ПОЛЬЗОВАТЕЛЬ».

<?php

$host = 'localhost';
$db_user = 'root';
$db_password = '';

$mysqli = new mysqli($host, $db_user, $db_password);
if ($mysqli->connect_errno) 
{
	printf("Connection error: %s\n", $mysqli->connect_error);
	exit();
}
else
{
	$query = "SELECT Host, User FROM mysql.user;";
	if ($result = $mysqli->query($query)) 
	{
		while ($row = $result->fetch_assoc()) 
		{
			echo $row["Host"] . '@' . $row["User"] . PHP_EOL;
		}
	}
	else 
	{
		echo 'We failed somehow' . PHP_EOL;
		printf("Error: %s\n", $mysqli->error);
	}
}

Пример полученных данных в результате работы скрипта:

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

Вывод привилегий пользователей MySQL / MariaDB в PHP

Следующий PHP код выведет привилегии для каждого из пользователей.

<?php

$host = 'localhost';
$db_user = 'root';
$db_password = '';

$mysqli = new mysqli($host, $db_user, $db_password);
if ($mysqli->connect_errno) 
{
	printf("Connection error: %s\n", $mysqli->connect_error);
	exit();
}
else
{
	$query = "SELECT * FROM mysql.user;";
	if ($result = $mysqli->query($query)) 
	{
		while ($row = $result->fetch_assoc()) 
		{
			print_r($row);
		}
	}
	else 
	{
		echo 'We failed somehow' . PHP_EOL;
		printf("Error: %s\n", $mysqli->error);
	}
}

Пример полученных данных в результате работы скрипта:

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


Рекомендуемые статьи:

Оставить комментарий

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