Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГОСЫ / Administrirovanie.doc
Скачиваний:
43
Добавлен:
15.02.2016
Размер:
150.02 Кб
Скачать
  1. Администрирование и система привилегий субд MySql

MySQL - это система управления реляционными базами данных. MySQL является системой клиент-сервер, которая содержит многопоточный SQL-сервер, обеспечивающий поддержку различных вычислительных машин баз данных, а также несколько различных клиентских программ и библиотек, средства администрирования и широкий спектр программных интерфейсов (API). Программное обеспечение MySQL представляет собой очень быстрый многопоточный, многопользовательский надежный SQL-сервер баз данных (SQL - язык структурированных запросов). Сервер MySQL предназначен как для критических по задачам производственных систем с большой нагрузкой, так и для встраивания в программное обеспечение массового распространения.

СУБД MySQL не работает со списком пользователей (учетных записей), который есть у операционной системы. У нее своя таблица пользователей. Тем не менее, если при работе с имеющимися клиентскими программами не ввести имя пользователя в процессе регистрации на сервере, будет подставлено системное имя пользователя. СУБД MySQL может поддерживать множество БД и содержать множество пользователей. Каждый пользователь СУБД должен получить учетную запись с обязательным паролем. Наиболее разумно (из соображений безопасности) иметь разные пароли для входа в ОС и MySQL, хотя в общем случае они могут совпадать.

Привилегия – это право определенного пользователя выполнять определенные действия над определенными объектами. Администратору СУБД (и не только) рекомендуется следовать принципу наименьших привилегий: пользователь или процесс должен обладать наименьшим уровнем привилегий, необходимым для выполнения назначенного задания. ЧТО НЕ РАЗРЕШЕНО, ТО ЗАПРЕЩЕНО.

СУБД MySQL использует специальную базу данных mysql для предоставления прав доступа к своим базам данных. Эти права могут базироваться на именах серверов и/или пользователей и предоставляться для одной или нескольких баз данных. Суперпользователь или администратор MySQL имеет account (login) root.

Пользовательские account должны быть снабжены паролями. При обращении к базе данных, пароль шифруется/хэшируется (по умолчанию применяется однонаправленная функция Password – реализация MD5). То есть при соединении с сервером пароль передается по сети в шифрованном виде. Схема аутентификации MYSQL:

  • При установлении соединения сервер посылает случайное число клиенту.

  • Клиент шифрует пароль и вычисляет число из полученного с сервера случайного числа и зашифрованного пароля. Это число отсылается на сервер.

  • Сервер вычисляет число из сохраненного в зашифрованном виде пароля и сгенерированного случайного числа. Если это число совпадет с тем, которое прислал клиент, связь устанавливается.

Собственная система привилегий, которая обеспечивает безопасность и администрирование СУБД-сервера, описывается 5-ю таблицами в специальной системной БД с названием mysql:

user, host, db, tables_priv, columns_priv.

  1. user – содержит данные о пользователях и безопасности, относящиеся к СУБД-серверу в целом; предназначена для определения пользователя и возможности его подключения к серверу - ГЛОБАЛЬНЫЕ ПРИВИЛЕГИИ

  2. host – содержит права доступа к серверу баз данных для удаленных компьютеров

  3. db, tables_priv, columns_priv - управляют доступом к отдельным базам данных, таблицам и столбцам таблиц – ЛОКАЛЬНЫЕ ПРИВИЛЕГИИ.

Управление доступом в MySQL осуществляется в два этапа:

Этап 1: сервер проверяет, имеется ли у пользователя вообще разрешение на соединение с СУБД-сервером – таблица user.

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

Набор полей в таблицах различается в зависимости от версий СУБД. Но существует неизменяемая часть. Каждая таблица привилегий включает в себя контекстные поля (которые идентифицируют пользователя) и поля привилегий, определяющие, какие действия может выполнять данный пользователь.

ПРОЦЕСС ВЕРИФИКАЦИИ ЗАПРОСА ДОСТУПА к СЕРВЕРУ.

Для запросов на администрирование (SHUTDOWN, RELOAD, т.д.) сервер проверяет запись только в таблице user, т.к. это единственная таблица, которая определяет привилегии администрирования. Доступ предоставляется при условии, что выбранная запись разрешает затребованные операции, и запрещается в противном случае. Например, вы хотите завершить работу mysql с помощью mysqladmin shutdown, но ваша запись в таблице user не предоставляет вам привилегию SHUTDOWN. В этом случае в доступе будет отказано без дальнейшей проверки таблицы db и host (поскольку в них отсутствует столбец Shutdown_priv, в такой проверке нет необходимости).

В случае запросов, относящихся к базам данных (INSERT, UPDATE и т.д.), сервер сначала проверяет глобальные привилегии пользователя, просматривая запись в таблице user. Если эта запись разрешает затребованную операцию, доступ предоставляется. Если глобальные привилегии, указанные в таблице user, недостаточны, сервер проверяет таблицы db и host и определяет привилегии пользователя на уровне баз данных:

  1. Сервер просматривает таблицу db в поисках записи с подходящими значениями в полях Host, Db и User. Поля Host и User сравниваются с именем подключающегося хоста и именем пользователя MySQL. Поле Db сравнивается с именем базы данных, к которой пользователь хочет получить доступ. Если запись с подходящими значениями в полях Host и User отсутствует, в доступе будет отказано.

  2. Если же в таблице db имеется подходящая запись и значение в поле Host - не пустое, эта запись определяет привилегии пользователя, касающиеся базы данных.

  3. Если же в подходящей записи, выбранной в таблице db, значение в поле Host пустое, это означает, что перечень хостов, которым разрешен доступ к требуемой базе данных, приведен в таблице host. В этом случае дальнейший поиск производится в таблице host, где ищется запись с подходящими значениями в полях Host и Db. Если ни одной подходящей записи в таблице host нет, в доступе будет отказано. Если такая запись имеется, привилегии пользователя на уровне базы данных вычисляются путем логического умножения (не логического сложения!) привилегий, найденных в записях, которые выбраны в таблицах db и host. Другими словами, пользователю назначаются те привилегии, для которых в обеих записях установлено значение 'Y'. (Этот способ можно использовать следующим образом: предоставить всеобщие привилегии в записи, хранящейся в таблице db, а затем выборочно ограничить их отдельно по каждому хосту, используя для этого записи в таблице host.)

Определив привилегии на уровне базы данных, предоставляемые записями в таблицах db и host, сервер добавляет их к глобальным привилегиям, заданным в таблице user. Если в результате привилегий оказывается достаточно для выполнения затребованной операции, доступ предоставляется. В противном случае сервер проверяет по таблицам tables_priv и columns_priv привилегии пользователя на уровне таблиц и столбцов и добавляет их к уже имеющимся привилегиям. В зависимости от полученного результата доступ либо предоставляется, либо нет.

РЕКОМЕНДАЦИЯ: наиболее правильно заводить рядовых пользователей в таблице user вообще без прав, то есть только их регистрировать, чтобы они могли подключиться к СУБД-серверу. Остальные права назначать для каждого пользователя в таблицах db и host исходя из его потребностей.

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

  • Привилегия GRANT позволяет пользователям передавать свои привилегии другим пользователям. Два пользователя с неодинаковыми привилегиями, имея привилегию GRANT, способны объединить свои привилегии и тем самым повысить уровень своих прав.

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

  • Привилегия FILE может использоваться злонамеренно для считывания любого самого засекреченного файла, хранящегося на сервере, в таблицу базы данных, к содержимому которой можно затем получить доступ с помощью команды SELECT. Это относится и к содержимому всех баз данных, которые находятся под управлением сервера!

  • Привилегия SHUTDOWN может использоваться злонамеренно для полного прекращения работы сервера и, таким образом, полного запрещения обслуживания других пользователей.

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

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

Есть вещи, которые система привилегий MySQL делать не может:

  • Нельзя явно указать, что данному пользователю должен быть закрыт доступ. Т.е. вы не можете явно выбрать пользователя и затем отказать ему в подключении.

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

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

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

  • Изменения привилегий таблиц и столбцов вступают в силу при следующем запросе клиента

  • Изменения привилегий баз данных вступают в силу при следующем использовании команды USE db_name

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

Соседние файлы в папке ГОСЫ