П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 180393 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 78721 раз(а).

Учебник HTML.
Просмотров 75682 раз(а).

Руководство по PHP5.
Просмотров 46698 раз(а).

Хостинг через призму DNS.
Просмотров 54161 раз(а).

Подборка текстов стандартных документов.
Просмотров 46609 раз(а).

Учебник PHP - Самоучитель
Просмотров 52794 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 53397 раз(а).

Внешние атаки...
Просмотров 43177 раз(а).

Учебник PHP.
Просмотров 38722 раз(а).

SSI в примерах.
Просмотров 28642 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





Глава 4. Администрирование баз данных
Пред. След.

4.2. Общие проблемы безопасности и система привилегий доступа 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. Ниже перечислены поля этих таблиц привилегий:

Имя таблицыuserdbhost
Поля контекстаHostHostHost
 UserDbDb
 PasswordUser 
Поля привилегийSelect_privSelect_privSelect_priv
 Insert_privInsert_privInsert_priv
 Update_privUpdate_privUpdate_priv
 Delete_privDelete_privDelete_priv
 Index_privIndex_privIndex_priv
 Alter_privAlter_privAlter_priv
 Create_privCreate_privCreate_priv
 Drop_privDrop_privDrop_priv
 Grant_privGrant_privGrant_priv
 References_priv  
 Reload_priv  
 Shutdown_priv  
 Process_priv  
 File_priv  

На втором этапе управления доступом (верификация запросов) сервер может (в случае, если запрос относится к таблицам базы данных) дополнительно обратиться к таблицам tables_priv и columns_priv. Поля этих таблиц привилегий перечислены ниже:

Имя таблицыtables_privcolumns_priv
Поля контекстаHostHost
 DbDb
 UserUser
 Table_nameTable_name
  Column_name
Поля привилегийTable_privColumn_priv
 Column_priv 
Иные поляTimestampTimestamp
 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 Раздел 4.2.10, «Управление доступом, этап 2: верификация запросов».

Поля контекста - это строковые значения, объявленные, как показано ниже; устанавливаемым по умолчанию значением для каждого из них является пустая строка:

Имя поляТипПримечания
HostCHAR(60) 
UserCHAR(16) 
PasswordCHAR(16) 
DbCHAR(64)(CHAR(60) для таблиц tables_priv и columns_priv tables)
Table_nameCHAR(60) 
Column_nameCHAR(60) 

В таблицах user, db и host все поля привилегий имеют объявленный тип ENUM('N','Y'), т.е. возможно одно из двух значений - 'N' и 'Y', а устанавливаемым по умолчанию является 'N'.

В таблицах tables_priv and columns_priv поля привилегий объявляются как SET:

Имя таблицыИмя поляДопустимые элементы набора
tables_privTable_priv'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter'
tables_privColumn_priv'Select', 'Insert', 'Update', 'References'
columns_privColumn_priv'Select', 'Insert', 'Update', 'References'

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

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

  • Таблицы db и host используются совместно:

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

    • Таблица host используется в качестве расширения таблицы db в случае, если необходимо применить некоторую запись из таблицы db к разным хостам. Например, если вы хотите предоставить пользователю возможность обращаться к базе данных с различных хостов сети, оставьте пустым поле в записи этого пользователя в таблице db, а затем внесите в таблицу host запись для каждого из этих хостов. Более подробно данный механизм описан в разделе See Раздел 4.2.10, «Управление доступом, этап 2: верификация запросов».

  • Таблицы tables_priv и columns_priv подобны таблице db, но областью их действия является уже уровень таблиц и столбцов, а не баз данных.

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

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

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

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

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


Назад Начало Главы Начало Раздела Вперед

Пред. Глава След. Глава
Глава 3. Учебное пособие по MySQL Начало Книги Глава 5. Оптимизация в MySQL


Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru