ХОСТИНГ

99mb.ru

ТАРИФЫРЕГИСТРАЦИЯСТАТЬ ПАРТНЕРОМПОДДЕРЖКА

Документация MySQL


4.2.5 Функции, выполняемые системой привилегий Оглавление 4.2.7 Привилегии, предоставляемые MySQL


4.2.6 Как работает система привилегий

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

MySQL идентифицирует пользователя как по имени хоста, так и по имени пользователя, т.к. нет оснований полагать что данное имя пользователя принадлежит во всей Сети единственному человеку. Например, пользователь joe, устанавливающий соединение с office.com, вовсе не обязательно один и тот же человек, что и пользователь joe, подсоединяющийся с elsewhere.com. MySQL решает эту проблему, обеспечивая возможность различать пользователей, подсоединяющихся с различных хостов под одним и тем же именем пользователя: вы можете предоставлять joe один набор привилегий, если он подсоединяется с office.com, и другой набор привилегий, если joe подсоединяется с elsewhere.com.

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

  • Этап 1: сервер проверяет, имеется ли у вас вообще разрешение на подсоединение. 2item Этап 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.

В полях привилегий указываются привилегии, предоставляемые записью в таблице, т.е. то, какие операции разрешено выполнять. Сервер формирует полное описание привилегий пользователя, комбинируя информацию, хранящуюся в разных таблицах привилегий. Это осуществляется по правилам, которые описаны в разделе See section 4.2.10 Управление доступом, этап 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 запись для каждого из этих хостов. Более подробно данный механизм описан в разделе See section 4.2.10 Управление доступом, этап 2: верификация запросов.
  • Таблицы tables_priv и columns_priv подобны таблице db, но областью их действия является уже уровень таблиц и столбцов, а не баз данных.

Заметим, что привилегии администрирования (RELOAD, SHUTDOWN и т.д..) задаются только в таблице user. Это связано с тем, что операции администрирования являются операциями над самим сервером, а не над базами данных, поэтому не смысла перечислять такие привилегии в других таблицах привилегий. Фактически для того, чтобы выяснить, имеете ли вы привилегии выполнять операции администрирования, достаточно обратиться только к таблице user.

Привилегия FILE также задается только в таблице user. Она не является привилегией администрирования как таковой, но возможность производить чтение или запись файлов на серверном хосте не связана с базой данных, к которой вы получаете доступ.

Сервер mysqld считывает содержимое таблиц привилегий единожды, при его запуске. О том, каким образом изменения, вносимые в таблицы привилегий, вступают в силу, рассказывается в разделе See section 4.3.3 Когда изменения в привилегиях вступают в силу.

При внесении изменений в таблицы привилегий стоит убедиться в том, что ваши изменения задают привилегии именно так, как задумано вами. Помощь по диагностике проблем вы найдете в разделе See section 4.2.11 Причины появления ошибок Access denied ("в доступе отказано"). По вопросам, связанным с безопасностью, следует обращаться к разделу See section 4.2.2 Как обезопасить MySQL от хакеров.

Полезным диагностическим инструментом является скрипт mysqlaccess, которым Ив Карлье (Yves Carlier) укомплектовал дистрибутив MySQL. Запустите mysqlaccess с опцией --help чтобы посмотреть, как он работает. Заметим, что mysqlaccess контролирует доступ, используя только таблицы user, db и host. Он не проверяет привилегии на уровне таблиц или столбцов.


4.2.5 Функции, выполняемые системой привилегий Оглавление 4.2.7 Привилегии, предоставляемые MySQL


Документация Apache
Документация MySQL
Документация PHP






Всего за $ 9,99 в месяц Вы получаете качественный хостинг, множество полезных сервисов и возможность участия в партнерской программе.

Зарабатывайте на нас деньги!

 

Также только у нас Вы можете воспользоваться уникальной акцией: