ДМИТРИЙ ГОРЯИНОВ
FAQ MySQL
Конфигурация MySQL «по умолчанию»
При запуске MySQL «читает» настройки из файла конфигурации.
Под UNIX это могут быть файлы:
- /etc/my.cnf;
- DATADIR/my.cnf;
- defaults-extra-file;
- ~/.my.cnf.
DATADIR – директория данных MySQL (обычно это /usr/local/mysql/data при установке из бинарников или /usr/local/var при установке из исходников).
Под Windows (начиная с версии 3.22):
- windows-system-directorymy.ini;
- C:my.cnf.
В этом файле в том числе прописывается пользователь root.
Внимание!
- По умолчанию пароль для root не установлен! Установите его!
...
user=root
password=ваш_новый_пароль
- Так как под Windows отсутствует механизм регулирования того, откуда и куда можно устанавливать соединения, ваш MySQL оказывается открыт всему миру! Эту ситуацию следует изменить (через установку и настройку firewall, встроенным фильтратором пакетов на сетевой карте или иным способом)!
Установка пароля для пользователя root в MySQL
Так как установка MySQL по умолчанию производится максимально открытой, первое, что вы должны сделать, – определять пароль для пользователя root в MySQL.
Вы можете сделать это следующим образом:
shell> mysql -u root mysql
mysql> SET PASSWORD FOR root@localhost=PASSWORD("new_password");
Если вы достаточно уверены в своих действиях, вы можете непосредственно манипулировать таблицами привилегий:
shell> mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD(“new_password”) WHERE user=’root’;
mysql> FLUSH PRIVILEGES;
Другой путь устанавливать пароль – использование команды mysqladmin:
shell> mysqladmin -u root password new_password
Как только пароль для пользователя root будет установлен, вы должны использовать этот пароль при подключении к MySQL-серверу от имени root!
Изменять пароль для других пользователей могут только пользователи с правом доступа для записи и обновления к базе данных mysql.
Все «нормальные» пользователи (т.е. не являющиеся анонимными) могут только изменить свой собственный пароль с помощью описанных выше команд или с помощью команды:
mysql> SET PASSWORD=PASSWORD("new password");
Имейте в виду, что если вы корректируете пароль непосредственно в таблице user, вы должны дать серверу команду перечитать таблицы привилегий:
mysql> FLUSH PRIVILEGES;
– в противном случае изменений не произойдет!
Первичная настройка привилегий в MySQL под Windows
Так как установка MySQL по умолчанию производится максимально открытой, первое, что вы должны сделать – определять пароль для пользователя root и удалить анонимного пользователя в MySQL.
Вы можете сделать это следующим образом:
путь_к_директории_MySQLin> mysql mysql
mysql> DELETE FROM user WHERE Host="localhost" AND User="";
mysql> QUIT
путь_к_директории_MySQLin>mysqladmin reload
путь_к_директории_MySQLin>mysqladmin -u root password your_password
После того как вы установили пароль для пользователя root, вы должны использовать его при обращении к серверу, как root. Например:
путь_к_директории_MySQLin>mysqladmin --user=root --password=your_password shutdown
Внимание! Рекомендую также удалить всех анонимных пользователей и пользователей с неустановленным паролем!
Дело в том, что по умолчанию при установке создается НЕ ТОЛЬКО root и анонимный пользователь для localhost!
Host User Password ...
---- ---- --------
...
% root
%
Значение % в столбце Host означает «любой» – вам это надо? Думаю, нет, так что:
путь_к_директории_MySQLin> mysql -uroot -pyour_password mysql
mysql> DELETE FROM user WHERE User="";
mysql> DELETE FROM user WHERE Password="";
mysql> QUIT
путь_к_директории_MySQLin> mysqladmin -uroot -pyour_password reload
Создание баз данных и доступ к ним для отдельных проектов
Вообще работать из-под пользователя root – «дурной тон» и крайне небезопасное дело.
Поэтому рекомендую создавать отдельную базу данных и отдельного пользователя для каждого рабочего проекта.
Операция это несложная, делать это нужно из-под пользователя root:
mysql> CREATE DATABASE mydatabase_name;
mysql> GRANT ALL PRIVILEGES ON mydatabase_name.* TO user_name@host_name IDENTIFIED BY "password";
где:
- user_name – имя пользователя;
- host_name – хост, с которого будет производиться соединение (может быть, localhost);
- password – пароль, с которым будет производится соединение.