MySQL, как и любая другая СУБД представляет собой программу-сервер, которая находится в памяти компьютера и обслуживает TCP порт. В случае с MySQL, номером порта будет являться число 3306. А клиентская программа, будь то CGI-приложение на Perl либо программный продукт на C, соединяется с СУБД по этому порту и посылает ему строчки на SQL. Тот в свою очередь их интерпретирует, выполняя необходимые действия, и отсылает результаты запроса обратно клиенту. Таким способом происходит общение сервера баз данных с клиентскими программами.
Для запуска MуSQL-сервера необходимо выполнить файл mysqld.exe. Сервер запускается как безоконный фоновый процесс. При этом он остается в памяти и обрабатывает запросы от клиентских приложений.
Для остановки сервера следует выполнить команду:
mysqladmin -u root shutdown.
Если сервер не был остановлен корректно, то при последующем запуске в файле mysql.err будет добавлена запись о некорректном завершении. Корректная остановка сервера необходима для сохранения всех данных, которые находятся в кэшах MySQL.
MуSQL имеет развитую систему доступа к базам данных. Пользователю базы данных может быть предоставлен доступ ко всей базе данных, отдельным таблицам и отдельным столбцам таблиц. Имеется разграничение на действия, которые может производить пользователь с записями. Для организации такой сложной (на первый взгляд) структуры доступа используется несколько таблиц в специальной базе данных. На основании значений этих таблиц выстраивается политика предоставления доступа.
База данных, которую сервер MуSQL использует для хранения внутренней информации о пользователях, по умолчанию имеет имя mуsql. В этой базе данных определены таблицы для хранения информации пользовательских учетных записей. Содержание БД mysql в таблице 1.1.
Таблица 1.1. Список таблиц прав доступа
Порядок проверки
Название таблицы
Описание
user
Список всех пользователей сервера MySQL с правами доступа ко всей базе данных в целом
db
Список баз данных с сопоставленными им пользователями и их привилегиями на выполнение операции
host
Список компьютеров, с которых возможен доступ к сопоставленной компьютеру базе данных, и привилегии на выполнение операций, которые могут проводиться через соединение с этого компьютера
tables_priv
Список таблиц баз данных, к которым возможен доступ пользователя
columns_priv
Список столбцов базы данных, к которым возможен доступ пользователя
Проверка прав доступа производится в порядке, указанном в таблице 1.1. Прежде всего проверяется, существует ли пользователь и какие возможности он имеет при управлении базой данных (таблица1.2.).
Таблица 1.2. Поля таблицы user
Название поля
Тип
Значение по умолчанию
Описание
Host
Char(60)
Компьютер пользователя, с которого разрешено подключение
User
Char(16)
Имя пользователя
Password
Char(16)
Пароль пользователя
Select_priv
Enum(‘N’, ‘Y’)
N
Привилегии на выборку данных оператором SELECT
Insert_priv
Enum(‘N’, ‘Y’)
N
Привилегии на вставку данных оператором INSERT
Update_priv
Enum(‘N’, ‘Y’)
N
Привилегии на изменение данных оператором UPDATE
Delete_priv
Enum(‘N’, ‘Y’)
N
Привилегии на удаление данных оператором DELETE
Reload_priv
Enum(‘N’, ‘Y’)
N
Привилегии на перезапуск сервера MySQL, а также сброс данных из памяти на диск
Shutdown_priv
Enum(‘N’, ‘Y’)
N
Привилегии на отключение сервера MySQL
Process_priv
Enum(‘N’, ‘Y’)
N
Привилегии на просмотр состояния текущих процессов сервера
File_priv
Enum(‘N’, ‘Y’)
N
Привилегии, необходимые для работы с файловой системой, например оператором LOAD DATA INFILE
Grant_priv
Enum(‘N’, ‘Y’)
N
Привилегии, позволяющие пользователю устанавливать привилегии другим пользователям
References_priv
Enum(‘N’, ‘Y’)
N
Привилегии, позволяющие ссылаться на объект
Index_priv
Enum(‘N’, ‘Y’)
N
Привилегии, необходимые для индексирования данных
Alter_priv
Enum(‘N’, ‘Y’)
N
Привилегии, позволяющие обновлять данные
Поля с типом Enum ( ‘N’, ‘Y’ ) считаются разрешенными, если установлено значение Y, и неразрешенными, если установлено значение N.
Для администратора сервера MуSQL необходимы все привилегии, для обычных пользователей в данной таблице обычно не разрешена ни одна из привилегии, т. е. Обычные пользователи не могут изменять конфигурацию сервера MySQL. Исключением можно считать привилегии File_priv, если пользователь активно работает с файловой системой.
Поле host может быть описано как IP-адрес или имя, а также может быть пустым. В имени компьютера и в имени пользователя разрешается применение регулярных выражений.
Пароли хранятся в зашифрованном виде и не имеют функции обратной дешифровки. Для того чтобы задать пароль, необходимо использовать функцию password ().
Если привилегии на просмотр процессов сервера не разрешены, тогда пользователь может видеть только собственные процессы.
На этапе проверки значений таблицы user пропускаются для дальнейшей обработки только те соединения, у которых поля Host, User и значения функции password () от значения пароля, полученного от клиента, совпадают.
Дальнейшая обработка приводится в таблице db. На этом этапе определяются привилегии, которыми обладает пользователь для работы с конкретной базой данных (таблица. 1.3).
Таблица 1.3. Привилегии для работы с базой данных
Название поля
Тип
Значение по умолчанию
Описание
Host
Адрес компьютера пользователя, с которого разрешено подключение
Db
Имя базы данных
User
Имя пользователя
Select_priv
Enum(‘N’, ‘Y’)
N
Привилегии на выборку данных оператором SELECT
Insert_priv
Enum(‘N’, ‘Y’)
N
Привилегии на вставку данных оператором INSERT
Update_priv
Enum(‘N’, ‘Y’)
N
Привилегии изменения данных оператором UPDATE
Delete_priv
Enum(‘N’, ‘Y’)
N
Привилегии на удаление данных DELETE
Create_priv
Enum(‘N’, ‘Y’)
N
Привилегии, необходимые для создани таблиц оператором CREATE TABLE
Drop_priv
Enum(‘N’, ‘Y’)
N
Привилегии, необходимые для удаления таблиц оператором DROP TABLE
Grant_priv
Enum(‘N’, ‘Y’)
N
Привилегии, позволяющие пользователю устанавливать привилегии другим пользователям
References_priv
Enum(‘N’, ‘Y’)
N
Привилегии, позволяющие ссылаться на объект
Index_priv
Enum(‘N’, ‘Y’)
N
Привилегии, необходимые для индексирования данных
Alter_priv
Enum(‘N’, ‘Y’)
N
Привилегии, позволяющие обновлять данные
Привилегии, указанные в таблице db, перекрывают значения, полученные в таблице user, именно поэтому пользователи могут не иметь ни одной привилегии в таблице user.
Один пользователь может иметь несколько различных адресов, с которых может производиться подключение, поэтому на данном этапе проверяется значение Host. Если значение поле Host пусто, тогда проводится дополнительная проверка в таблице host. Таблица Host идентична таблице Db, за исключением того, что в ней отсутствует поле User. Столбцы таблицы host аналогичны столбцам таблицы db, разница состоит только в том, что данные из таблицы host при совпадении полей Host и Db имеют более высокий приоритет, и перекрывают ранее установленные значения.
MySQL сервер позволяет устанавливать ограничения на доступ к отдельным таблицам и столбцам таблицы (эта информация хранится в таблицах tables_priv и columns_priv), но увеличение числа проверок приводит к уменьшению производительности.