Авторизация пользователя, уже успешно прощедшего аутентификацию, заключается в том, чтобы сопоставить данного пользователя с его привилегиями (правами) в базе данных, т.е. определить, какие операции в базе разрешено ему выполнять. К таким привилегиям в могут относиться, например, разрешение выполнять команды DML: SELECT, INSERT, DELETE, UPDATE. Это могут быть также права на выполнение каких-либо административных функций или специфических функций такие, как LOAD DATA INFILE и т.п.
Типы привилегий.
Существует несколько типов привилегий, которые могут быть выданы аккаунту в MySQL:
- global (действуют на всех базах данных экземпляра). По умолчанию это первый уровень проверки при прохождении авторизации;
- database (действуют для конкретной базы данных MySQL);
- table (права на конкретную таблицу);
- column (права на столбец в таблице);
- routine (права на процедуры).
Например, если пользователю нужно читать таблицы во всех базах данных, проще всего дать ему привилегию SELECT на глобальном уровне, чем давать ему соответствующие права на каждую отдельную базу. С другой стороны, можно не давать пользователю глобальных прав, а дать ему полный контроль на конкретную базу данных, что позволит ему создавать там свои объекты, а также изменять, удалять и выбирать данные из таблиц.
Думаю, всем понятно, что пользователю необходимо давать только те привилегии, которые ему действительно нужны для работы.
Существует несколько спецификаторов, которые также могут использоваться для работы с привилегиями:
- ALL или ALL PRIVILEGES можно использовать для того, чтобы выдать все возможные привилегии на базу данных или какой-то объект, за исключением привилегии выдавать, в свою очередь, права на этот объект другим аккаунтам (для этого необходимо еще выдать GRANT OPTION);
- USAGE является синонимом отсутствия привилегий (“no privileges”). Используется для того, чтобы создать аккаунт без привилегий, который может быть использован для каких-то ограниченных целей. Например, для того, чтобы посмотреть переменные или статус (SHOW VARIABLES или SHOW STATUS). У такого аккаунта не будет доступа к каким-либо таблицам в базах данных, хотя при необходимости можно дать ему такие права позже.
Административные привилегии.
К административным привилегиям относятся следующие:
- FILE – позволяет читать или писать файлы в файловой системе сервера;
- PROCESS – позволяет с помощью команды SHOW PROCESSLIST увидеть какие команды выполняют в настоящий момент пользователи в MySQL;
- SUPER – административная роль, позволяющая выполнять дополнительные административные задачи такие, как установка глобальных переменных в системе или прерывание других пользовательских сессий.
Выдавать административные привилегии пользователям надо очень осмотрительно и только в случае необходимости.
Команда SHOW PROCESSLIST.
Команда SHOW PROCESSLIST показывает пользовательские процессы в базе данных MySQL. Пример выполнения команды представлен на рисунке ниже:
Информация выводится в виде таблицы, состоящей из следующих колонок:
- Id – идентификатор коннекта;
- User – пользователь (клиент) MySQL, кому принадлежит данный коннект;
- Host – имя хоста клиента MySQL;
- db – имя выбранной базы данных или NULL;
- Command – тип выполняемой команды;
- Time – время в секундах выполнения текущей команды;
- State – текущее состояние процесса;
- Info – выполняемая команда или NULL.
Для того, чтобы увидеть не только свой процесс, но и процессы других пользователей, необходима привилегия PROCESS.
Подобную информацию о пользовательских процессах можно получить еще при обращении к таблице PROCESSLIST из INFORMATION_SCHEMA или командой mysqladmin processlist.
Если в команде SHOW PROCESSLIST не используется ключевое слово FULL, то в поле Info мы увидим только первые 100 символов каждой исполняемой команды, как это и показано на рисунке выше.
Использования ключа FULL (SHOW FULL PROCESSLIST) может быть очень полезно в некоторых случаях. Например, если вы получаете ошибку “too many connections” и хотите понять, что же иенно случилось. В MySQL зарезервирован один дополнительный коннект для пользователя с привилегией SUPER. Соответственно, администратор всегда может подконнектиться и предпринять необходимые действия.
С помощью команды KILL пользовательские процессы могут быть прерваны или убиты, если Вам больше нравится такое слово.