При подключении к серверу MySQL используется, как правило, пароль. По линии связи пароль не передается в виде открытого текста, но алгоритм шифрования не очень сложный. Толковый хакер, если ему удастся перехватить трафик между клиентом и сервером, при определенной настойчивости может взломать пароль. Поэтому если связь между клиентом и сервером осуществляется по ненадежной сети, для шифрования связи следует использовать SSH-туннель.
Вся остальная информация
передается в текстовом виде и
может быть прочитана кем угодно,
кто в состоянии отлеживать
подключение. Если это вас
беспокоит, можно воспользоваться
протоколом со сжатием данных (в MySQL
3.22 и последующих версиях), что
значительно затруднит подобные
действия. Чтобы еще более повысить
безопасность связи, следует
использовать протокол
ssh. Open
source-клиент ssh
доступен на веб-сайте
http://www.openssh.org/,
а коммерческий ssh-клиент
можно получить на веб-сайте
http://www.ssh.com/. С
помощью такого протокола можно
обеспечить зашифрованную связь по
протоколу TCP/IP между сервером MySQL и
клиентом MySQL.
Если вы используете MySQL 4.0, то можете также использовать предусмотренную в этой версии поддержку протокола OpenSSL. Обратитесь к разделу See Раздел 4.3.9, «Использование безопасных соединений».
Для обеспечения безопасности MySQL-системы необходимо строго придерживаться следующих рекомендаций:
У всех пользователей MySQL должны
быть пароли. Для приложений
клиент/сервер является
общепринятым, что клиент может
указывать любое имя
пользователя, но если для
other_user не задан пароль,
то кто угодно может зайти под
любым именем, просто введя
mysql -u other_user db_name. Чтобы
этого избежать, можно изменить
пароль для всех пользователей,
отредактировав скрипт
mysql_install_db перед
запуском приложения, или только
пароль для
root-пользователя MySQL,
как это показано ниже:
shell>mysql -u root mysqlmysql>UPDATE user SET Password=PASSWORD('new_password')WHERE user='root'; mysql>FLUSH PRIVILEGES;
Не запускайте демон MySQL от имени
пользователя Unix root.
Это очень опасно, потому что
любой пользователь, имеющий
привилегию FILE, будет в
состоянии создавать файлы как
пользователь root
(например ~root/.bashrc).
Чтобы предотвратить это,
mysqld откажется
запускаться от имени
пользователя root, если
это не будет задано напрямую с
помощью опции --user=root. В
то же время mysqld может
быть запущена от имени обычного
непривилегированного
пользователя. Можно также, в
целях еще большего укрепления
безопасности, создать новый
аккаунт Unix-пользователя
mysql. При запуске
mysqld от имени другого
пользователя Unix у вас отпадает
необходимость заменять имя
пользователя root в
таблице user, так как
имена пользователя в MySQL не имеют
ничего общего с аккаунтами
пользователей Unix. Для запуска
mysqld от имени другого
пользователя Unix добавьте в
группу [mysqld] файла
опций /etc/my.cnf или
файла опций my.cnf,
находящегося в каталоге данных
сервера, строку user,
задающую имя пользователя.
Например:
[mysqld] user=mysql
В результате сервер будет
запущен от имени назначенного
пользователя, независимо от
того, производится запуск
вручную или посредством
safe_mysqld или
mysql.server. Для получения
дополнительной информации
обратитесь к разделу See
Раздел A.3.2, «Запуск MySQL от обычного пользователя».
Откажитесь от поддержки
символических ссылок на таблицы
(ее можно запретить с помощью
опции --skip-symlink). Это
особенно важно в том случае, если
вы запускаете mysqld от
имени пользователя root,
поскольку у того, кто имеет право
доступа для записи в каталоги
данных mysqld, появляется
возможность стереть любой файл в
системе! Обратитесь к разделу See
Раздел 5.6.1.2, «Использование символических ссылок для таблиц».
Удостоверьтесь, что пользователь Unix, от имени которого запускается mysqld, является единственным пользователем, имеющим привилегии чтения/записи в директории базы данных.
Не предоставляйте привилегии
PROCESS всем
пользователям. Команда
mysqladmin processlist выводит
текст запросов, обрабатываемых в
данный момент. Следовательно,
любой пользователь, имеющий
право на выполнение этой
команды, получает возможность
прочитать, например, такой
запрос другого пользователя, как
UPDATE user SET
password=PASSWORD('not_secure').
mysqld резервирует
добавочное подключение для
пользователей, имеющих
привилегию PROCESS, так
что пользователь MySQL под именем
root может подключиться
и осуществлять контроль даже в
том случае, когда все обычные
подключения заняты.
Не предоставляйте привилегии
FILE всем пользователям.
Любой пользователь, имеющий
такую привилегию, может записать
в любом месте файловой системы
файл с привилегиями демона
mysqld! Чтобы обеспечить
здесь хоть минимальную защиту,
все файлы создаваемые с помощью
команды SELECT ... INTO OUTFILE,
сделаны общедоступными для
записи, но перезаписать
существующие файлы нельзя.
Привилегия FILE может
быть также использована для
чтения любого файла, доступного
пользователю Unix, от имени
которого запускается сервер.
Можно также прочитать любой файл
в текущую базу данных. Это может
быть использовано в корыстных
целях. Возможно, например, с
помощью команды LOAD DATA
загрузить /etc/passwd в
таблицу и прочесть ее позже с
помощью SELECT.
Если вы не доверяете своему DNS-серверу, используйте в таблицах привилегий вместо имен хостов IP-адреса. В любом случае следует очень осторожно относиться к внесению в таблицы привилегий записей, в которых значения имени хоста содержат шаблонные символы!
Чтобы ограничить число
подключений, доступных для
отдельного пользователя, можно в
mysqld задать значение
переменной
max_user_connections.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
