MySQL имеет развитую систему доступа к базам данных. пользователю базы данных может быть предоставлен доступ ко всей базе данных, отдельным таблицам и отдельным столбцам таблиц. Имеется разграничение на действия, которые может производить пользователь с записями. Для органи-зации такой структуры доступа используется несколько таблиц в специальной базе данных. На основании значений этих таблиц выстраивается политика предоставления доступа.
Добавление новых пользователей осуществляется по обычной схеме добавления записей в таблицу базы данных MySQL. Пример создания пользователей дан на рис.
Было создано три пользователя:
monty - cуперпользователь (администратор), должен использо-вать пароль, для работы с MySQL:
dummy должен быть допущен к индивидуальной базе данных по таблице 'db ';
admin не нуждается в пароле, но разрешено выполнение только команд 'mysqladmin reload' и 'mysqladmin processlist'. Может быть допущен к индивидуальной базе данных через таблицу 'db'.
База данных, которую сервер MySQL использует для хранения внутренней информации о пользователях, по умолчанию имеет имя mysql. В этой базе данных определены таблицы для хранения информации пользовательских учетных записей.
Проверка прав доступа производится в порядке, указанном в предыдущей таблице. Прежде всего проверяется, существует ли пользователь и какие возможности он имеет при управлении базой данных (табл. user).
Поля с типом enum('N','Y') считаются разрешенными, если для них установлено значение Y, и неразрешенными, если установлено значение N.
Для администратора сервера MySQL необходимы все привилегии; для обычных пользователей в данной таблице обычно не разрешена ни одна из привилегий этой таблицы, то есть обычные пользователи не могут изменять конфигурацию сервера MySQL. Исключением можно считать привилегии File_priv, если пользователь активно работает с файловой системой.
Поле host может быть описано как IP-адрес или имя, а также быть пустым. В имени компьютера и в имени пользователя разрешается применение регулярных выражений.
Пароли хранятся в зашифрованном виде и не имеют функции обратной дешифровки. Для того, чтобы задать пароль, необходимо использовать функцию password( ).
Если привилегии на просмотр процессов сервера не разрешены, тогда пользователь может видеть только собственные процессы.
На этапе проверки значений таблицы user пропускаются для дальнейшей обработки только те соединения, у которых поля Host, User и значение функции password ( ) от значения пароля, полученного от клиента, совпадают.
Дальнейшая обработка проводится в таблице db, на этом этапе определяются привилегии, которыми обладает пользователь для работы с конкрет-ной базой данных (см. табл.).
Как и в предыдущем случае, поле host, имя пользователя и название базы данных могут содержать специальные символы регулярных выражений.
Привилегии, указанные в таблице db, перекрывают значения, полученные в таблице user, именно поэтому пользователи могут не иметь ни одной привилегии в таблице user.
Один пользователь может иметь несколько различных адресов, с которых может производиться подключение, поэтому на данном этапе проверяется значение Host. Если значение поля Host пусто, тогда производится допол-нительная проверка в таблице host (см. табл.)
Столбцы таблицы host аналогичны столбцам таблицы db, разница состоит только в том, что данные из таблицы host при совпадении полей Host и Db имеют более высокий приоритет и перекрывают ранее установленные значения.
MySQL позволяет устанавливать ограничения на доступ к отдельным таблицам и столбцам таблицы (см. следующие две таблицы), но увеличение количества проверок приводит к уменьшению производительности.
Наличие хотя бы одной записи в таблице tables_priv или columns_priv приведет к тому, что все входящие запросы будут проверяться на соответствие выполняемым операциям. Поскольку количество проверок на соответствие разрешенным привилегиям возрастет в несколько раз, перед применением таких ограничений следует протестировать производительность сервера баз данных с типовой нагрузкой. Если возникнут проблемы с производительностью, нужно будет изменить конфигурацию сервера либо отказаться от та-кого типа проверок.
Следует помнить следующие правила при настройке прав доступа:
Имя сервера и поля в таблице db могут содержать регулярные выражения языка SQL: символы "%" и "_". В других полях использовать их нельзя;
Имя сервера может быть доменным именем, именем localhost, IP адресом или SQL выражением. Пустое поле "имя сервера" означает любой сервер;
Поле db является именем базы данных или SQL выражением;
Пустое имя пользователя эквивалентно любому пользователю;
Пустой пароль эквивалентен любому паролю. Вы можете создать суперпользователя (super-user), установив все права для него в 'Y' в таблице пользователей при его создании. Этот пользователь сможет делать что угод-но, не считаясь со значениями, установленными в таблице db;
Таблица серверов проверяется только когда в таблице db поле "имя сервера" пустое;
Все таблицы, по возможности, сортируются в порядке host-user-db.