Linux. Полное руководство.

17.1. Установка MySQL.

Прежде всего нужно установить пакеты, необходимые для работы MySQL. У меня MySQL версии 4.0.15, поэтому я установил такие пакеты (номера версий у вас, возможно, будут другими, и я их обозначил символами «x»):

♦ MySQL_GPL-4.x.x.

♦ MySQL_GPL-client-4.x.x.

♦ MySQL_GPL-shared-libs-4.x.

♦ MySQL_GPL-bench-4.x.x.

♦ MySQL_GPL-resolveip-4.x.x.

После установки пакетов нужно создать системную базу данных mysql, содержащую таблицы db, host и user. Скорее всего, она уже создана, но, чтобы окончательно убедиться в этом, введите команду:

# mysql_install_db.

17.1.1. Назначение пароля суперпользователя.

Учетные записи и пароли всех пользователей, которые имеют право работать с сервером, содержатся в таблице user. Сразу же после создания базы mysql в эту таблицу внесен только один пользователь — root. По умолчанию он не имеет пароля. Этот пароль нужно установить немедленно: не нужно объяснять, как это важно для безопасности системы. Для изменения пароля запустите сервер командой:

# safe_mysqld &

Эта команда запустит сервер в режиме демона и освободит консоль. Если все пакеты были установлены правильно, вы увидите сообщение:

Mysql: ready for connections.

Затем введите команду:

$ mysql -u root mysql.

Эта команда запускает клиент MySQL (MySQL-монитор) и соединяется с сервером от имени пользователя root, даже если вы работаете под другой учетной записью. Последний аргумент указывает базу данных, которую требуется открыть.

SQL-запросы можно набирать в строке приглашения MySQL-монитора, заканчивая ввод точкой с запятой или командой \g (go), а можно редактировать в текстовом редакторе, введя команду \е (edit). Список команд MySQL-монитора можно получить по команде \h (help).

Измените пароль суперпользователя с помощью следующего запроса:

UPDATE user SET Password=PASSWORD('новый_пароль') WHERE.

User='root';

Как вы заметили, это обычный SQL-запрос, обновляющий поле Password таблицы user для пользователя root. При вводе запроса обратите внимание на регистр названий полей: сервер MySQL различает прописные и строчные буквы!

Теперь нужно, чтобы MySQL принял изменения. Для этого выполните еще один запрос SQL:

FLUSH PRIVILEGES;

Завершите сеанс работы с MySQL-монитором, введя команду \q (quit). В следующий раз зарегистрироваться на сервере без пароля вы уже не сможете. Теперь нужно запускать MySQL-монитор следующей командой:

$ mysql -u root -p mysql.

Ключ -p запросит при регистрации пароль. Имейте в виду: забытый пароль нельзя восстановить. Единственный выход из этого положения — удалить каталог /var/lib/mysql/mysql и создать базу mysql заново командой mysql_install_db.

Для принятия изменений можно также использовать программу mysqladmin с аргументом reload. Вызвать программу можно так:

$ mysqladmin -p reload.

Параметр -p вам обязательно нужно использовать, так как вы только что установили пароль для пользователя root.

Установите права доступа к сценарию /etc/rc.d/init.d/mysqld:

# chmod +x /etc/rc.d/init.d/mysqld.

Теперь можете перезапустить сервер командой.

# /etc/rc.d/init.d/mysqld restart.

17.1.2. Автозапуск сервера MySQL.

Последнее, что вам осталось сделать — это добавить сервер MySQL в автозапуск. С этой целью перейдите в каталог /etc/rc.d/rc3.d и создайте символическую ссылку на файл /etc/rc.d/init.d/mysql:

# ln -s S14mysql /etc/rc.d/init.d/mysql.

Префикс S14 определяет очередность запуска сервера mysqld. В данном случае он запустится после сервисов network (S10) и portmap (S11). У вас эти значения могут быть другими.

17.1.3. Пользователи сервера MySQL и их права.

После установки сервера нужно завести пользователей, которые имеют право работать с сервером баз данных. Введите следующий запрос:

GRANT ALL PRIVILEGES ON *.* TO admin@localhost IDENTIFIED BY.

'пароль' WITH GRANT OPTION;

Введенный вами запрос создаст пользователя admin, который будет иметь право выполнять любые операции со всеми базами данных. Этот пользователь будет иметь право подключаться к серверу с компьютера localhost, используя пароль.

Маска *.* определяет, к каким базам данных и таблицам имеет право подключаться тот или иной пользователь. Первая звездочка определяет базу, а вторая — таблицу. Если вам нужно, чтобы пользователь admin имел право подключаться с любого узла, используйте знак процента вместо имени компьютера:

GRANT ALL PRIVILEGES ON *.* TO admin@"%" IDENTIFIED BY.

'пароль' WITH GRANT OPTION;

Вместо всех полномочий вы можете определить, какие действия может выполнять с базой тот или иной пользователь. Если вы являетесь хостинг-провайдером и предоставляете доступ пользователю к его базе данных, то вы можете использовать следующий запрос:

GRANT CREATE,DROP,SELECT,INSERT,UPDATE,DELETE,INDEX ON.

User.* TO user@% IDENTIFIED BY 'пароль';

Этот запрос позволяет пользователю user выполнять все операции с его базой данных.

Полный список полномочий представлен в таблице 17.1.

Полномочия пользователей сервера MySQL Таблица 17.1.

Полномочия Описание
SELECT, INSERT, UPDATE, DELETE Право просматривать, добавлять, модифицировать, удалять данные в таблицах базы данных
INDEX Право производить операции с индексами таблиц
REFERENCES Право работать со ссылками в базах данных и таблицах
CREATE, DROP Право создавать и удалять таблицы и базы данных
GRANT, ALTER Право определять полномочия
RELOAD, SHUTDOWN, PROCESS Право перезагружать, останавливать сервер и просматривать все процессы (подключения)

Если запрос GRANT у вас не работает, то вы можете внести пользователя непосредственно в таблицу user базы данных mysql. Структура таблицы user выглядит следующим образом:

Host User Password Select_priv Insert_priv Update_priv.

Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv.

Process_priv File_priv.

Поля Host, User, Password — это, соответственно, узел, из которого пользователь может получить доступ, имя и пароль пользователя. Все остальные поля задают полномочия. Если выполнение какой-нибудь операции разрешено пользователю, значение поля должно быть равным «Y», в противном случае — «N».

Например, нам нужно создать пользователя admin, который должен иметь все полномочия. Это можно сделать с помощью такого запроса SQL:

INSERT INTO user(Host,User,Password,Select_priv,Insert_priv,

Update_priv, Delete_priv, Create_priv, Drop_priv,

Reload_priv, Shutdown_priv, Process_priv, File_priv).

VALUES ('localhost', 'admin', password('4td561s12'),

'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');

Для создания обыкновенного пользователя используйте следующий запрос:

INSERT INTO user(Host, User, Password, Select_priv,

Insert_priv, Update_priv, Delete_priv) VALUES('%',

'user', password('123456') , 'Y' , 'Y' , 'Y' , ' Y');