Search the MySQL manual:
Subscribe to the monthly
MySQL Newsletter!

4.2.3 Опции запуска mysqld, относящиеся к безопасности

К безопасности имеют отношение следующие опции mysqld:

--local-infile[=(0|1)]
При установке опции --local-infile=0 теряется возможность выполнять команду LOAD DATA LOCAL INFILE.
--safe-show-database
Если установлена эта опция, команда SHOW DATABASES возвращает только те базы данных, для которых пользователь имеет какую-либо привилегию. Начиная с версии 4.0.2 эта опция отменена и не служит ни для чего (она включена по умолчанию), т.к. сейчас у нас имеется привилегия SHOW DATABASES. Обратитесь к разделу See section 4.3.1 Синтаксис команд GRANT и REVOKE.
--safe-user-create
При установке этой опции пользователь не может создавать новых пользователей с помощью команды GRANT, если у него отсутствует привилегия INSERT для таблицы mysql.user. Чтобы предоставить пользователю доступ именно для создания новых пользователей с теми привилегиями, которые он имеет право предоставлять, для этого пользователя следует установить следующую привилегию:
mysql> GRANT INSERT(user) ON mysql.user TO 'user'&hacute;ostname';
Задание такой привилегии гарантирует, что этот пользователь не сможет непосредственно вносить изменения ни в одном из столбцов привилегий, а для предоставления привилегий другим пользователям должен будет использовать команду GRANT.
--skip-grant-tables
Установка этой опции запрещает серверу вообще использовать систему привилегий. Это открывает кому бы то ни было полный доступ ко всем базам данных! (После запуска сервера можно заставить его снова использовать таблицы привилегий с помощью команды mysqladmin flush-privileges или mysqladmin reload.)
--skip-name-resolve
При установке данной опции имена хостов не разрешены. Все значения в столбцах Host таблиц привилегий должны быть либо IP-адресами, либо localhost.
--skip-networking
Не разрешает осуществлять подсоединений по протоколу TCP/IP через сеть (данная опция запрещает такие подсоединения). Все подсоединения к mysqld должны осуществляться посредством сокетов Unix. Для MySQL старше 3.23.27 эта опция непригодна для систем, в которых используются MIT-потоки, так как MIT-потоки на тот момент не поддерживали сокеты Unix.
--skip-show-database
Разрешает выполнение команды SHOW DATABASES только в том случае, если пользователь имеет привилегию SHOW DATABASES. Начиная с версии 4.0.2 в этой опции больше нет необходимости, т.к. теперь доступ может предоставляться избирательно с помощью привилегии SHOW DATABASES.

User Comments

Posted by Bas Meijer on May 9 2002 9:01am[Delete] [Edit]

A simple security enhancement missing in
this list would be for:

[mysqld]
bind-address=127.0.0.1

This means localhost can only connect, and
that's enough for small scale projects. They
won't see port 3306 in portscans anymore.

Posted by Bryce Nesbitt on April 7 2003 6:41am[Delete] [Edit]

If your application, web server and database all run on the same machine, then you probably don't need networking enabled at all. Use of the "--skip-networking" flag is highly recommended.

Posted by Fraser Campbell on April 28 2003 9:07pm[Delete] [Edit]

So is there nothing equivalent to the suggested "bind-address=127.0.0.1". I really would find this feature useful because I'm running chrooted daemons. I either have to make hard links to the mysql socket file at startup time or I have to use tcp/ip ... tcp/ip would be much less problematic.

If the feature isn't supported I guess I'll resort to firewalling for now.

Posted by Serge Vleugels on September 3 2003 6:30am[Delete] [Edit]

use : set-variable = bind-address=127.0.0.1

works perfect for me

Posted by Bruce Nicholls on January 2 2004 6:21am[Delete] [Edit]

For setting these options read

http://www.faqs.org/docs/apache-compile/prereqs.html

2.4.4. Securing MySQL

or

http://www.linuxsecurity.com/tips/tip-24.html

Posted by Michael Krieger on February 13 2004 12:01pm[Delete] [Edit]

It's important to note that the SHOW DATABASES restriction only works if NO global privs are present at all. I performed an upgrade to 4.0.x from 3.x.x and found I couldn't restrict the display of databases. Turns out MySQL adds 'Create_tmp_table_priv' and 'Lock_tables_priv' by default as 'Y', meaning that suddenly, this doesn't work again. It would be assumed as this was insignificant considering the nature of these options, but it seems not.

Just save someone else 16 hours of fiddling.

Add your own comment.