колонтитул в word 2007, 0000002111
Как работает система привилегий - MySQL
Система привилегий MySQL обеспечивает пользователям возможность выполнять
только те действия, которые им разрешены в соответствии с их обязанностями.
Когда вы подсоединяетесь к серверу MySQL, ваша личность устанавливается по имени
хоста, с которого вы подсоединяетесь,
и имени пользователя, которое вы указываете.
Система предоставляет привилегии в соответствии с вашей личностью и
тем, что вы хотите делать.
MySQL идентифицирует пользователя как по имени хоста, так и по имени
пользователя, т.к. нет оснований полагать что данное имя пользователя
принадлежит во всей Сети единственному человеку. Например, пользователь
joe
, устанавливающий соединение с office.com
, вовсе не
обязательно один и тот же человек, что и пользователь joe
,
подсоединяющийся с elsewhere.com
. MySQL решает эту проблему,
обеспечивая возможность различать пользователей, подсоединяющихся с различных
хостов под одним и тем же именем пользователя: вы можете предоставлять joe
один набор привилегий, если он подсоединяется с office.com
, и
другой набор привилегий, если joe
подсоединяется с
elsewhere.com
.
Управление доступом в MySQL осуществляется в два этапа:
-
Этап 1: сервер проверяет, имеется ли у вас вообще разрешение на
подсоеди- нение.
Этап 2: если таковое имеется, сервер проверяет каждый из ваших
запросов, чтобы убедиться в том, что у вас имеется достаточно привилегий
для его выполнения. Например, если вы пытаетесь выбрать строки в таблице
базы данных или удалить таблицу из базы данных, сервер в первом случае
проверяет, имеется ли у вас для этой таблицы привилегия SELECT
,
а во втором - имеется ли у вас для этой базы данных привилегия
DROP
.
На обеих стадиях управления доступом сервер использует таблицы user
,
db
и host
из базы данных mysql
. Ниже
перечислены поля этих таблиц привилегий:
Имя таблицы |
user |
db |
host |
Поля контекста |
Host |
Host |
Host |
|
User |
Db |
Db |
|
Password |
User |
|
Поля привилегий |
Select_priv |
Select_priv |
Select_priv |
|
Insert_priv |
Insert_priv |
Insert_priv |
|
Update_priv |
Update_priv |
Update_priv |
|
Delete_priv |
Delete_priv |
Delete_priv |
|
Index_priv |
Index_priv |
Index_priv |
|
Alter_priv |
Alter_priv |
Alter_priv |
|
Create_priv |
Create_priv |
Create_priv |
|
Drop_priv |
Drop_priv |
Drop_priv |
|
Grant_priv |
Grant_priv |
Grant_priv |
|
References_priv |
|
|
|
Reload_priv |
|
|
|
Shutdown_priv |
|
|
|
Process_priv |
|
|
|
File_priv |
|
|
На втором этапе управления доступом (верификация запросов) сервер может (в
случае, если запрос относится к таблицам базы данных) дополнительно обратиться к
таблицам tables_priv
и columns_priv
. Поля этих таблиц
привилегий перечислены ниже:
Имя таблицы |
tables_priv |
columns_priv |
Поля контекста |
Host |
Host |
|
Db |
Db |
|
User |
User
|
|
Table_name |
Table_name |
|
|
Column_name |
Поля привилегий |
Table_priv |
Column_priv |
|
Column_priv |
|
Иные поля |
Timestamp |
Timestamp |
|
Grantor |
|
Каждая таблица привилегий включает в себя поля контекста и поля привилегий.
Поля контекста определяют область действия каждой из записей в таблицах, т.е.
контекст, к которому имеет отношение та или иная запись. Например, запись в
таблице user
, в полях Host
и User
которой
указаны значения 'thomas.loc.gov''bob'
, предназначена для
аутентификации подсоединений к серверу с хоста thomas.loc.gov
под
именем пользователя bob
. Аналогично запись в таблице db
,
в полях Host
, User
и Db
которой указаны
значения 'thomas.loc.gov'
, 'bob'
и 'reports'
,
будет использоваться при попытке пользователя по именем bob
подсоединиться с хоста thomas.loc.gov
и получить доступ к базе
данных reports
. В полях контекста в таблицах tables_priv
и columns_priv
указаны таблицы или комбинации таблиц/столбцов, к
которым применяется каждая запись.
При контроле доступа сравнение значений в полях Host
осуществляется без учета регистра. Значения в полях User
,
Password
, Db
и Table_name
также являются
независимыми от регистра символов. Значения в поле Column_name
являются независимыми от регистра символов, начиная с MySQL 3.22.12.
В полях привилегий указываются привилегии, предоставляемые записью в таблице,
т.е. то, какие операции разрешено выполнять. Сервер формирует полное описание
привилегий пользователя, комбинируя информацию, хранящуюся в разных таблицах
привилегий. Это осуществляется по правилам, которые описаны в разделе
- Управление доступом, этап 2: верификация запросов.
Поля контекста - это строковые значения, объявленные, как показано ниже;
устанавливаемым по умолчанию значением для каждого из них является пустая
строка:
Имя поля |
Тип |
Примечания |
Host |
CHAR(60) |
|
User |
CHAR(16) |
|
Password |
CHAR(16) |
|
Db |
CHAR(64) |
(CHAR(60) для таблиц tables_priv и
columns_priv tables) |
Table_name |
CHAR(60) |
|
Column_name |
CHAR(60) |
|
В таблицах user
, db
и host
все поля
привилегий имеют объявленный тип ENUM('N','Y')
, т.е. возможно одно
из двух значений - 'N'
и 'Y'
, а устанавливаемым по
умолчанию является 'N'
.
В таблицах tables_priv
and columns_priv
поля
привилегий объявляются как SET
:
Имя таблицы |
Имя поля |
Допустимые элементы набора |
tables_priv |
Table_priv |
'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant',
'References', 'Index', 'Alter' |
tables_priv |
Column_priv |
'Select', 'Insert', 'Update', 'References' |
columns_priv |
Column_priv |
'Select', 'Insert', 'Update', 'References' |
Если кратко, то сервер использует таблицы привилегий следующим образом:
-
Поля контекста таблицы user
определяют, разрешить
входящее подсоединение или отказать в нем. Для разрешенных подсоединений
любые привилегии, предоставленные в таблице user
, означают
глобальные привилегии пользователя (привилегии суперпользователя). Эти
привилегии распространяются на все базы данных, размещенные на сервере.
-
Таблицы db
и host
используются совместно:
-
Поля контекста таблицы db
определяют, каким
пользователям, при подсоединении с каких хостов разрешен доступ
к каким базам данных. Поля привилегий определяют разрешенные
операции.
-
Таблица host
используется в качестве расширения
таблицы db
в случае, если необходимо применить
некоторую запись из таблицы db к разным хостам. Например, если
вы хотите предоставить пользователю возможность обращаться к
базе данных с различных хостов сети, оставьте пустым поле в
записи этого пользователя в таблице db
, а затем
внесите в таблицу host
запись для каждого из этих
хостов. Более подробно данный механизм описан в разделе - Управление доступом, этап 2: верификация запросов.
-
Таблицы tables_priv
и columns_priv
подобны
таблице db
, но областью их действия является уже уровень
таблиц и столбцов, а не баз данных.
Заметим, что привилегии администрирования (RELOAD
,
SHUTDOWN
и т.д..) задаются только в таблице user
. Это
связано с тем, что операции администрирования являются операциями над самим
сервером, а не над базами данных, поэтому не смысла перечислять такие привилегии
в других таблицах привилегий. Фактически для того, чтобы выяснить, имеете ли вы
привилегии выполнять операции администрирования, достаточно обратиться только к
таблице user
.
Привилегия FILE
также задается только в таблице user
.
Она не является привилегией администрирования как таковой, но возможность
производить чтение или запись файлов на серверном хосте не связана с базой
данных, к которой вы получаете доступ.
Сервер mysqld
считывает содержимое таблиц привилегий единожды,
при его запуске. О том, каким образом изменения, вносимые в таблицы привилегий,
вступают в силу, рассказывается в разделе
- Когда изменения в привилегиях вступают в силу.
При внесении изменений в таблицы привилегий стоит убедиться в том, что ваши
изменения задают привилегии именно так, как задумано вами.
Полезным диагностическим инструментом является скрипт mysqlaccess
,
которым Ив Карлье (Yves Carlier) укомплектовал дистрибутив MySQL. Запустите
mysqlaccess
с опцией --help
чтобы посмотреть, как он
работает. Заметим, что mysqlaccess
контролирует доступ, используя
только таблицы user
, db
и host
. Он не
проверяет привилегии на уровне таблиц или столбцов.
колонтитулы в word 2007, 000000211111