Запуск MySQL от обычного пользователем
Сервер mysqld может запускаться и работать от любого пользователя. Чтобы настроить mysqld для работы под Unix-пользователем user_name , необходимо выполнить следующие действия:
Если сервер работает, остановите его (используйте mysqladmin shutdown ).
Измените каталоги и файлы баз данных так, чтобы user_name имел привилегии для чтения и записи файлов в этих каталогах (возможно, это нужно будет делать из Unix-аккаунта root ):
shell> chown -R user_name /path/to/mysql/datadir
Если среди каталогов или файлов в каталоге данных MySQL присутствуют символические ссылки, то нужно будет также перейти по этим ссылкам и изменить каталоги и файлы, на которые они указывают. chown -R может не отработать символических ссылок.
Запустите сервер из аккаунта user_name или, если у вас MySQL 3.22 и выше, запустите mysqld из Unix-аккаунта root и используйте опцию --user=user_name . mysqld переключится на выполнение в контексте Unix-пользователя user_name до того, как начнет обслуживать запросы на соединение.
Чтобы запускать сервер от имени данного пользователя автоматически в ходе загрузки системы, добавьте строку user, указывающую имя пользователя, в группе [mysqld] файла опций '/etc/my.cnf' или файла опций 'my.cnf' из каталога данных сервера. Например:
[mysqld] user=user_name
К этому моменту процесс mysqld должен без помех работать под Unix-пользователем user_name . Однако содержимое таблиц привилегий не изменяется. По умолчанию (сразу после выполнения скрипта инсталляции таблиц привилегий mysql_install_db ) MySQL-пользователь root является единственным пользователем с правами на доступ к базе данных mysql , а также на создание и удаление баз данных. Если вы не меняли этих полномочий, они по-прежнему действительны. То, что вы вошли в систему как Unix-пользователь, отличный от root , не может вам помешать получить доступ к MySQL в качестве MySQL-пользователя root; просто задайте клиентской программе опцию -u root .
Отметим, что работа с MySQL в качестве MySQL-пользователя root посредством указания -u root в командной строке не имеет ничего общего с выполнением MySQL под Unix-пользователем root , или вообще под каким бы то ни было Unix-пользователем. Привилегии доступа и имена пользователей MySQL никак не связаны с именами Unix-пользователей. Единственная связь с именами Unix-пользователей заключается в том, что если при запуске клиентской программы не задана опция -u , то клиент попытается соединиться, используя в качестве имени MySQL-пользователя имя Unix-аккаунта.
Если Unix-сервер не слишком хорошо защищен или не нуждается в повышенных мерах безопасности, следует как минимум установить в таблицах привилегий пароль для MySQL-пользователя root. В противном случае любой пользователь с аккаунтом на данной машине сможет запустить mysql -u root db_name и делать в MySQL все, что ему заблагорассудится.
Проблемы с правами доступа к файлам
Если существуют проблемы с правами доступа к файлам, например, если mysql при создании таблицы выдает следующее сообщение об ошибке:
ERROR: Can't find file: 'path/with/filename.frm' (Errcode: 13)
то, возможно, при запуске сервера mysqld неправильно устанавливается переменная окружения UMASK . По умолчанию значение umask 0660 . Его можно изменить, запуская safe_mysqld следующим образом:
shell> UMASK=384 # = 600 in octal shell> export UMASK shell> /path/to/safe_mysqld &
По умолчанию MySQL создает каталоги баз данных и RAID-каталоги с правами доступа 0700 . Такое поведение можно изменить, установив переменную UMASK_DIR . Если установить эту переменную, то при создании новых каталогов используется комбинация UMASK и UMASK_DIR . Например, если требуется, чтобы доступ ко всем новым каталогам получала группа, то можно выполнить:
shell> UMASK_DIR=504 # = 770 in octal shell> export UMASK_DIR shell> /path/to/safe_mysqld &
В версии MySQL 3.23.25 и выше MySQL предполагает, что значения для UMASK и UMASK_DIR , начинающиеся с нуля, восьмеричные. См. раздел Переменные окружения.
1 2
8 8 8
| |