Skip to content

Commit 6fbb227

Browse files
committed
Restrict host access for root user
The root user was created as @'%'. If the user opens the Docker network to the outside, this would allow connections to root from any host. * By default, root will only allow access from localhost (this means users have to use the docker exec command to connect to root) * We also add the environment variable MYSQL_ROOT_HOST, which if set will create a second root account for this host (e.g 172.17.0.1 for the standard Docker gateway).
1 parent 63917ec commit 6fbb227

File tree

4 files changed

+36
-12
lines changed

4 files changed

+36
-12
lines changed

5.5/docker-entrypoint.sh

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,19 @@ if [ "$1" = 'mysqld' ]; then
6060
MYSQL_ROOT_PASSWORD="$(pwmake 128)"
6161
echo "GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD"
6262
fi
63+
if [ -z "$MYSQL_ROOT_HOST" ]; then
64+
ROOTCREATE="SET PASSWORD FOR 'root'@'localhost'=PASSWORD('${MYSQL_ROOT_PASSWORD}');"
65+
else
66+
ROOTCREATE="SET PASSWORD FOR 'root'@'localhost'=PASSWORD('${MYSQL_ROOT_PASSWORD}'); \
67+
CREATE USER 'root'@'${MYSQL_ROOT_HOST}' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}'; \
68+
GRANT ALL ON *.* TO 'root'@'${MYSQL_ROOT_HOST}' WITH GRANT OPTION ;"
69+
fi
6370
"${mysql[@]}" <<-EOSQL
6471
-- What's done in this file shouldn't be replicated
6572
-- or products like mysql-fabric won't work
6673
SET @@SESSION.SQL_LOG_BIN=0;
67-
DELETE FROM mysql.user ;
68-
CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
69-
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;
74+
DELETE FROM mysql.user WHERE user NOT IN ('mysql.sys', 'mysqlxsys', 'root') OR host NOT IN ('localhost');
75+
${ROOTCREATE}
7076
DROP DATABASE IF EXISTS test ;
7177
FLUSH PRIVILEGES ;
7278
EOSQL

5.6/docker-entrypoint.sh

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,19 @@ if [ "$1" = 'mysqld' ]; then
6161
MYSQL_ROOT_PASSWORD="$(pwmake 128)"
6262
echo "GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD"
6363
fi
64+
if [ -z "$MYSQL_ROOT_HOST" ]; then
65+
ROOTCREATE="SET PASSWORD FOR 'root'@'localhost'=PASSWORD('${MYSQL_ROOT_PASSWORD}');"
66+
else
67+
ROOTCREATE="SET PASSWORD FOR 'root'@'localhost'=PASSWORD('${MYSQL_ROOT_PASSWORD}'); \
68+
CREATE USER 'root'@'${MYSQL_ROOT_HOST}' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}'; \
69+
GRANT ALL ON *.* TO 'root'@'${MYSQL_ROOT_HOST}' WITH GRANT OPTION ;"
70+
fi
6471
"${mysql[@]}" <<-EOSQL
6572
-- What's done in this file shouldn't be replicated
6673
-- or products like mysql-fabric won't work
6774
SET @@SESSION.SQL_LOG_BIN=0;
68-
DELETE FROM mysql.user ;
69-
CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
70-
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;
75+
DELETE FROM mysql.user WHERE user NOT IN ('mysql.sys', 'mysqlxsys', 'root') OR host NOT IN ('localhost');
76+
${ROOTCREATE}
7177
DROP DATABASE IF EXISTS test ;
7278
FLUSH PRIVILEGES ;
7379
EOSQL

5.7/docker-entrypoint.sh

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,19 @@ if [ "$1" = 'mysqld' ]; then
6060
MYSQL_ROOT_PASSWORD="$(pwmake 128)"
6161
echo "GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD"
6262
fi
63+
if [ -z "$MYSQL_ROOT_HOST" ]; then
64+
ROOTCREATE="ALTER USER 'root'@'localhost' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}';"
65+
else
66+
ROOTCREATE="ALTER USER 'root'@'localhost' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}'; \
67+
CREATE USER 'root'@'${MYSQL_ROOT_HOST}' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}'; \
68+
GRANT ALL ON *.* TO 'root'@'${MYSQL_ROOT_HOST}' WITH GRANT OPTION ;"
69+
fi
6370
"${mysql[@]}" <<-EOSQL
6471
-- What's done in this file shouldn't be replicated
6572
-- or products like mysql-fabric won't work
6673
SET @@SESSION.SQL_LOG_BIN=0;
67-
DELETE FROM mysql.user WHERE user NOT IN ('mysql.sys', 'mysqlxsys');
68-
CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
69-
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;
74+
DELETE FROM mysql.user WHERE user NOT IN ('mysql.sys', 'mysqlxsys', 'root') OR host NOT IN ('localhost');
75+
${ROOTCREATE}
7076
DROP DATABASE IF EXISTS test ;
7177
FLUSH PRIVILEGES ;
7278
EOSQL

8.0/docker-entrypoint.sh

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,19 @@ if [ "$1" = 'mysqld' ]; then
6060
MYSQL_ROOT_PASSWORD="$(pwmake 128)"
6161
echo "GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD"
6262
fi
63+
if [ -z "$MYSQL_ROOT_HOST" ]; then
64+
ROOTCREATE="ALTER USER 'root'@'localhost' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}';"
65+
else
66+
ROOTCREATE="ALTER USER 'root'@'localhost' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}'; \
67+
CREATE USER 'root'@'${MYSQL_ROOT_HOST}' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}'; \
68+
GRANT ALL ON *.* TO 'root'@'${MYSQL_ROOT_HOST}' WITH GRANT OPTION ;"
69+
fi
6370
"${mysql[@]}" <<-EOSQL
6471
-- What's done in this file shouldn't be replicated
6572
-- or products like mysql-fabric won't work
6673
SET @@SESSION.SQL_LOG_BIN=0;
67-
DELETE FROM mysql.user WHERE user NOT IN ('mysql.sys', 'mysqlxsys');
68-
CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
69-
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;
74+
DELETE FROM mysql.user WHERE user NOT IN ('mysql.sys', 'mysqlxsys', 'root') OR host NOT IN ('localhost');
75+
${ROOTCREATE}
7076
DROP DATABASE IF EXISTS test ;
7177
FLUSH PRIVILEGES ;
7278
EOSQL

0 commit comments

Comments
 (0)