РАЗРАБОТКА ПОЛИТИКИ РАЗГРАНИЧЕНИЯ ДОСТУПА)

Работа с пользователями в MySQL

Просмотреть список всех доступных привилегий можно с помощью команды SHOW PRIVILEGES монитора MySQL. В приведенной далее таблице перечислены самые важные привилегии. Каждая строка отображает привилегию вместе с описанием четырех уровней, на которых они могут назначаться. Например, во второй строке показана привилегия ALTER, управляющая применением инструкции ALTER TABLE, вместе с уровнями, на которых ею можно управлять.

  • Глобальный уровень - чтобы присвоить пользователю отдельную привилегию для всех баз данных на сервере, используйте в инструкции GRANT выражение ON * *.
  • Уровень базы данных - для выдачи привилегий в одной или нескольких базах данных можно использовать, к примеру, запись prestupnost. *
  • Уровень таблиц - для назначения привилегии в одной или нескольких таблицах базы данных можно использовать запись prestupnost. gruppirovka.
  • Уровень столбцов - подтверждение доступа к одному или нескольким столбцам таблицы базы данных (недоступно для ALTER). Доступ на уровне столбцов подтверждается с использованием заключенного в скобки списка столбцов, разделенных запятыми, следующего после привилегии.

В табл. 9.1 показаны уровни, на которых можно конфигурировать привилегии Global (G), Database (D), Table (T) и Column (С). Например, в первой строке показано, что привилегия ALL доступна на всех уровнях за исключением столбцов.

Привилегии и их уровни в MySQL

Привилегия

Приложение

G

D

T

c

1

2

3

4

5

6

ALL

Все простые привилегии за исключением возможности подтверждать привилегии (GRANTOPTION)

/

/

/

X

ALTER

Инструкция A LTER TABLE

/

/

/

X

CREATE

Инструкция CREATE

/

/

/

X

CREATE TEMPORARY TABLES

Инструкция CREATE TEMPORARY TABLES. Пользователю разрешено создавать временные таблицы в активной базе данных для собственных сеансов

/

/

X

X

DELETE

Инструкция DELETE

/

/

/

X

DROP

Инструкция DROP

/

/

/

X

EXECUTE

Хранимые процедуры (только начиная с версии MySQL 5)

/

X

X

X

FILE

Чтение и запись файлов на диск с помощью SELECT... INTO и LOAD DATA INFILE

/

X

X

X

GRANT

OPTION

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

/

/

/

X

INDEX

Инструкции CREATE INDEX и DROP INDEX

/

/

/

X

INSERT

Инструкция INSERT

/

/

/

/

LOCK TABLES

Инструкции LOCK TABLES и UNLOCK TABLES. Требуется привилегия SELECT для таблиц. Поскольку это привилегия уровня базы данных, она может подтверждаться только с использованием формата имя базы данных. * (или *. *)

/

/

X

X

PROCESS

SHOW FULL PROCESSLIST

/

X

X

X

Окончание табл. 9.1

1

2

3

4

5

6

REPLICATION

SLAVE

Управляет возможностью подчиненного сервера считывать двоичный журнал регистрации главного сервера

/

X

X

X

SELECT

Инструкция SELECT, позволяющая считывать данные из указанных таблиц

/

/

/

/

SHOW DATABASES

Управляет отображением всех баз данных с использованием инструкции SHOW DATABASES

/

X

X

X

SHUTDOWN

Управляет выключением сервера с помощью команды mysqladmin shutdown

/

X

X

X

SUPER

Инструкции CHANGE, MASTER, KILL, PURGE MASTER LOGS, SET GLOBAL и команда mysqladmin debug

/

X

X

X

UPDATE

Инструкция UPDATE для модификации существующих данных в указанных таблицах

/

/

/

/

USAGE

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

/

/

/

/

В табл. 9.1 показано значение опции ALL на глобальном уровне, а также на уровнях баз данных и таблиц. Например, во втором столбце показано, что происходит в результате назначении для пользователя GRANT ALL ON * * Все привилегии, помеченные галочками (S), предоставляются пользователю, а привилегии, отмеченные крестиком (X), пропускаются. Команда GRANT OPTION, позволяющая пользователю передать свои привилегии еще одному пользователю, недоступна для привилегий ALL на всех уровнях и должна задаваться явным образом (табл. 9.2).

Простые привилегии ALL

Привилегия

Глобальный уровень

База данных

Таблица

ALTER

/

/

/

CREATE

/

/

X

CREATE TEMPORARY TABLES

/

/

X

DELETE

/

/

/

DROP

/

/

/

EXECUTE

/

X

X

FILE

/

X

X

GRANT OPTION

X

X

X

INDEX

/

/

/

INSERT

/

/

/

LOCK TABLES

/

/

X

PROCESS

/

X

X

RELOAD

/

X

X

REPLICATION CLIENT

/

X

X

REPLICATION SLAVE

/

X

X

SELECT

/

/

/

SHOW DATABASES

/

X

X

SHUTDOWN

/

X

X

SUPER

/

X

X

UPDATE

/

/

/

Привилегия GRANT OPTION позволяет пользователю передавать любые свои права другим пользователям. Рассмотрим пример, где подключимся к монитору как пользователь root:

mysql> GRANT ALL ON prestupnost.* TO fprepoda-vatel-’(a)-’localhost-’ IDENTIFIED BY rthe_password-’;

Query OK, 0 rows affected (0.00 sec)

mysql> GRANT GRANT OPTION ON prestupnost.* TO fprepodavatel’@’localhost’ IDENTIFIED BY 110

fthe_pas sword ?*;

Query OK, 0 rows affected (0.00 sec)

Запрос создает пользователя MySQL prepodavatel и разрешает ему передавать свои привилегии для базы данных music другим пользователям. Поскольку привилегия GRANT OPTION задается на уровне базы данных (prestupnost.*), пользователь prepodavatel может передать свои привилегии для этой базы данных, а также для любой таблицы или столбца в этой БД. Привилегия GRANT OPTION всегда разрешает пользователю передавать свои права на любом более низком уровне, а также передавать все последующие привилегии, которые ему присваиваются.

Теперь протестируем новую привилегию пользователя prepodavatel. Для этого необходимо подключиться как пользователь MySQL root:

Теперь передадим паши привилегии другому пользователю:

mysql> GRANT ALL ON prestupnost.* TO 'laborant localhost1;

Query OK, 0 rows affected (0.00 sec)

Запрос передает все привилегии новому пользователю laborant (без пароля). Он не передает привилегию GRANT OPTION, однако при желании это можно сделать:

mysql> GRANT GRANT OPTION ON prestupnost.* TO ' laborant'(Э1 localhost';

Query OK, 0 rows affected (0.00 sec)

Теперь пользователь laborant имеет возможность выполнять в базе данных prestupnost те же операции, что и prepodavatel.

Существует возможность передать привилегию GRANT OPTION в отдельной инструкции, которая подтверждает и другие привилегии. Далее представлен пример использования альтернативного синтаксиса:

mysql> GRANT ALL ON prestupnost.* to 1 laborantlocalhost1 WITH GRANT OPTION;

Query OK, 0 rows affected (0.00 sec)

Запрос выполняет те же операции, что и предыдущий пример из двух этапов для пользователя laborant.

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

mysql> GRANT ALL ON music.artist TO 'rose'®'localhost1;

Query 0Кл 0 rows affected (0.00 sec)

Поскольку prepodavatel обладает всеми привилегиями для всех таблиц базы данных prestupnost, он может передать все привилегии для таблицы gruppirovka любому новому пользователю.

Как и большинство других серверов баз данных, MySQL имеет пользователей с привилегиями, определяющими их права на создание, модифицирование, удаление БД и выполнение запросов, а также на модифицирование привилегий и управление сервером. На практике это управление может быть крупно-структурным, когда пользователю разрешен или запрещен доступ к серверу, или мелкоструктурным, при котором пользователь имеет доступ лишь к определенным таблицам базы данных или даже к немногим столбцам таблицы. Некоторые серверы БД поддерживают только крупноструктурное управление, а другие, в том числе и MySQL, — как крупноструктурный, так и мелкоструктурный контроль доступа к данным.

Сервер MySQL позволяет управлять получением доступа пользователей к серверу, базам данных, таблицам и столбцам на сервере, а также определять для них типы действий, которые они могут выполнять с этими структурами. Например, MySQL разрешает явным образом управлять правом пользователей запускать инструкции SELECT, UPDATE, INSERT и DELETE, использовать для структур выражения LOCK TABLES, ALTER, а также создавать или удалять индексы. По большей части задавать пользователей с правом доступа и модификации данных в базе, но без привилегий настройки конфигурации сервера, изменения структуры БД или получения доступа к другим базам данных.

Пользователи MySQL отличаются от пользователей операционной системы компьютера сервера. Настраивая компьютер, автоматически создаются учетные записи суперпользователя, позволяющие конфигурировать сервер. В системе Linux или Mac OS X таким пользователем является root, а в Windows — это Administrator. Помимо суперпользователя создается еще несколько учетных записей для работы с сервером. Например, может быть учетная запись суперпользователя, которая применялась только при установке и конфигурировании программного обеспечения или нового текстового редактора. Для записи, чтения электронной почты, работы с Web и выполнения других операций вполне хватает обычной учетной записи.

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

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

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ ОРИГИНАЛ   След >