21.6.18.3 Процедуры безопасности NDB Cluster и MySQL
В этом разделе мы обсудим стандартные процедуры безопасности MySQL, применяемые при работе с NDB Cluster.
В общем случае любые стандартные процедуры для безопасной работы с MySQL также применимы к работе сервера MySQL в составе NDB Cluster. Прежде всего, вы всегда должны запускать сервер MySQL от пользователя операционной системы mysql; это ничем не отличается от запуска MySQL в стандартной (не кластерной) среде. Аккаунт системы mysql должен быть уникально и четко определен. К счастью, это поведение по умолчанию для новой установки MySQL. Вы можете проверить, что процесс mysqld работает от пользователя операционной системы mysql, используя системную команду, например, показанную здесь:
$> ps aux | grep mysql
root 10467 0.0 0.1 3616 1380 pts/3 S 11:53 0:00 \
/bin/sh ./mysqld_safe --ndbcluster --ndb-connectstring=localhost:1186
mysql 10512 0.2 2.5 58528 26636 pts/3 Sl 11:53 0:00 \
/usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/var --user=mysql --ndbcluster \
--ndb-connectstring=localhost:1186 --pid-file=/usr/local/mysql/var/mothra.pid \
--log-error=/usr/local/mysql/var/mothra.err
jon 10579 0.0 0.0 2736 688 pts/0 S+ 11:54 0:00 grep mysql
Если процесс mysqld работает от любого пользователя, кроме mysql, вы должны немедленно его остановить и перезапустить от пользователя mysql. Если такого пользователя нет в системе, необходимо создать пользователя mysql и добавить его в группу пользователей mysql; в этом случае также необходимо убедиться, что каталог данных MySQL в этой системе (установленный с помощью опции --datadir для mysqld) принадлежит пользователю mysql, и что файл SQL узла my.cnf содержит user=mysql в разделе [mysqld]. В качестве альтернативы вы можете запустить процесс сервера MySQL с помощью --user=mysql в командной строке, но предпочтительно использовать опцию my.cnf, так как вы можете забыть использовать опцию командной строки и, таким образом, mysqld будет работать от другого пользователя непреднамеренно. Скрипт запуска mysqld_safe заставляет MySQL работать от пользователя mysql.
Никогда не запускайте mysqld от системного пользователя root. Это означает, что потенциально любой файл в системе может быть прочитан MySQL, а следовательно — в случае взлома MySQL — и злоумышленником.
Как упоминалось в предыдущем разделе (см. Раздел 21.6.18.2, «NDB Cluster и привилегии MySQL»), вы всегда должны установить пароль для root-пользователя сервера MySQL как только он запущен. Также необходимо удалить учетную запись анонимного пользователя, установленную по умолчанию. Вы можете выполнить эти задачи с помощью следующих операторов:
$> mysql -u root
mysql> UPDATE mysql.user
-> SET Password=PASSWORD('secure_password')
-> WHERE User='root';
mysql> DELETE FROM mysql.user
-> WHERE User='';
mysql> FLUSH PRIVILEGES;
Будьте очень осторожны при выполнении оператора DELETE, чтобы не опустить условие WHERE, иначе вы рискуете удалить всех пользователей MySQL. Не забудьте выполнить оператор FLUSH PRIVILEGES сразу после изменения таблицы mysql.user, чтобы изменения вступили в силу немедленно. Без FLUSH PRIVILEGES изменения не вступят в силу до следующей перезагрузки сервера.
Многие утилиты NDB Cluster, такие как ndb_show_tables, ndb_desc и ndb_select_all, также работают без аутентификации и могут раскрывать имена таблиц, схемы и данные. По умолчанию на системах Unix эти утилиты устанавливаются с разрешениями wxr-xr-x (755), что означает, что их может выполнить любой пользователь, имеющий доступ к каталогу mysql/bin.
Дополнительную информацию об этих утилитах см. в разделе 21.5, «Программы NDB Cluster».
© 2025 Oracle
Licensed under the GPLv2 License.