18.5.11.3 NDB Cluster and MySQL Security Procedures

In this section, we discuss MySQL standard security procedures
as they apply to running NDB Cluster.

In general, any standard procedure for running MySQL securely
also applies to running a MySQL Server as part of an NDB
Cluster. First and foremost, you should always run a MySQL
Server as the mysql system user; this is no
different from running MySQL in a standard (non-Cluster)
environment. The mysql system account should
be uniquely and clearly defined. Fortunately, this is the
default behavior for a new MySQL installation. You can verify
that the mysqld process is running as the
system user mysql by using the system command
such as the one shown here:

If the mysqld process is running as any other
user than mysql, you should immediately shut
it down and restart it as the mysql user. If
this user does not exist on the system, the
mysql user account should be created, and
this user should be part of the mysql user
group; in this case, you should also make sure that the MySQL
data directory on this system (as set using the
--datadir option for
mysqld) is owned by the
mysql user, and that the SQL node's
my.cnf file includes
user=mysql in the [mysqld]
section. Alternatively, you can start the MySQL server process
with --user=mysql on the command
line, but it is preferable to use the
my.cnf option, since you might forget to
use the command-line option and so have
mysqld running as another user
unintentionally. The mysqld_safe startup
script forces MySQL to run as the mysql user.

Important

Never run mysqld as the system root user.
Doing so means that potentially any file on the system can be
read by MySQL, and thus—should MySQL be
compromised—by an attacker.

As mentioned in the previous section (see
Section 18.5.11.2, “NDB Cluster and MySQL Privileges”), you
should always set a root password for the MySQL Server as soon
as you have it running. You should also delete the anonymous
user account that is installed by default. You can accomplish
these tasks using the following statements:

Be very careful when executing the
DELETE statement not to omit the
WHERE clause, or you risk deleting
all MySQL users. Be sure to run the
FLUSH
PRIVILEGES statement as soon as you have modified the
mysql.user table, so that the changes take
immediate effect. Without
FLUSH
PRIVILEGES, the changes do not take effect until the
next time that the server is restarted.

Note

Many of the NDB Cluster utilities such as
ndb_show_tables,
ndb_desc, and
ndb_select_all also work without
authentication and can reveal table names, schemas, and data.
By default these are installed on Unix-style systems with the
permissions wxr-xr-x (755), which means
they can be executed by any user that can access the
mysql/bin directory.