mysqld
, относящиеся к безопасности
Access denied
("в доступе отказано")
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
flush-privileges
или
mysqladmin reload
.)
--skip-name-resolve
Host
таблиц привилегий должны быть либо IP-адресами, либо
localhost
.
--skip-networking
mysqld
должны осуществляться посредством сокетов Unix. Для MySQL старше 3.23.27 эта опция
непригодна для систем, в которых используются MIT-потоки, так как MIT-потоки на тот
момент не поддерживали сокеты Unix.
--skip-show-database
SHOW DATABASES
только в том случае, если
пользователь имеет привилегию SHOW DATABASES
. Начиная с версии 4.0.2 в
этой опции больше нет необходимости, т.к. теперь доступ может
предоставляться избирательно с помощью привилегии SHOW DATABASES
.
User Comments
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.
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.
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.
use : set-variable = bind-address=127.0.0.1
works perfect for me
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
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.