Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / MySQL / Администрирование баз данных /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Общие проблемы безопасности и система привилегий доступа MySQL - Программирование от RIN.RU
Общие проблемы безопасности и система привилегий доступа 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
code>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 считывает содержимое таблиц привилегий единожды, при его запуске. О том, каким образом изменения, вносимые в таблицы привилегий, вступают в силу, рассказывается в разделе Когда изменения в привилегиях вступают в силу.


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


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


<<<  НазадВперед  >>>
 1  2  3  4  5  6  7  8 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Администрирование баз данных

Общие проблемы безопасности и система привилегий доступа MySQL

Управление учетными записями пользователей MySQL

Предотвращение катастроф и восстановление

Справочник по языку администрирования баз данных

Локализация MySQL и использование национальных алфавитов

Серверные сценарии и утилиты MySQL

Клиентские сценарии и утилиты MySQL

Файлы журналов MySQL

Репликация в MySQL

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь