Kar*_*ikJ 56 mysql linux shell
我试图使用自动响应自动化mysql_secure_installation脚本.我的代码如下:
echo "& y y abc abc y y y y" | ./usr/bin/mysql_secure_installation
Run Code Online (Sandbox Code Playgroud)
我自动化的实际问题如下:
Enter current password for root (enter for none): <enter>
Set root password? [Y/n] y
New password: abc
Re-enter new password: abc
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
Run Code Online (Sandbox Code Playgroud)
但它给了我一个错误"抱歉,你不能在这里使用空密码",但在屏幕上,我曾经按下第一个问题的返回键.
Sle*_*ely 73
我偶然发现了这个问题,但决定通过Bash脚本手动运行查询:
#!/bin/bash
# Make sure that NOBODY can access the server without a password
mysql -e "UPDATE mysql.user SET Password = PASSWORD('CHANGEME') WHERE User = 'root'"
# Kill the anonymous users
mysql -e "DROP USER ''@'localhost'"
# Because our hostname varies we'll use some Bash magic here.
mysql -e "DROP USER ''@'$(hostname)'"
# Kill off the demo database
mysql -e "DROP DATABASE test"
# Make our changes take effect
mysql -e "FLUSH PRIVILEGES"
# Any subsequent tries to run queries this way will get access denied because lack of usr/pwd param
Run Code Online (Sandbox Code Playgroud)
Jak*_*uld 46
由于mysql_secure_installation
只是一个Bash脚本,只需查看原始源代码,如下所示.查找读取的行,do_query
(注意我放置的额外空间do_query
;需要查找与函数相关的查询)然后您可以找到这些命令.
UPDATE mysql.user SET Password=PASSWORD('root') WHERE User='root';
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)
请注意,对于此示例,我设置了密码,root
但可以随意更改密码以满足您的设置需求.无论如何,只需要一堆MySQL命令并将其保存在一个名为的文件中mysql_secure_installation.sql
.
完成后,只需通过脚本运行以下命令来保护MySQL安装:
mysql -sfu root < "mysql_secure_installation.sql"
Run Code Online (Sandbox Code Playgroud)
在s
沉默的错误和f
力量,如果一个扼流圈的命令仍能继续.在u
涉及到紧挨其后其中,在本例-显然是用户名root
.
在没有密码的情况下在最初安装MySQL的部署脚本中运行它,并且您都可以将其锁定而无需任何键盘交互.
PS:这个脚本被放在一起,以确保在Ubuntu 14.04上安装MySQL,该安装与export DEBIAN_FRONTEND=noninteractive
set和实际安装命令设置为sudo -E aptitude install -y --assume-yes -q mysql-server mysql-client
.这样做会在没有密码的情况下在Ubuntu上干净地安装MySQL; 这对于部署脚本很有用.mysql -sfu root < "mysql_secure_installation.sql"
在安装发生后,这只会在几秒钟内锁定它.
Sla*_*lam 21
你可以尝试使用expect.看看这个自动化mysql_secure_installation或我的修改.
小智 18
我刚刚在CentOS 6.7上做了以下内容:
mysql_secure_installation <<EOF
y
secret
secret
y
y
y
y
EOF
Run Code Online (Sandbox Code Playgroud)
小智 6
这是基于@JakeGould's answer的全新 MySQL 5.7 安装的自动脚本。在 CentOS 7.5.1804 上运行良好。
yum localinstall -y https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
yum install -y mysql-community-server
# start mysql service
service mysqld start
# get Temporary root Password
root_temp_pass=$(grep 'A temporary password' /var/log/mysqld.log |tail -1 |awk '{split($0,a,": "); print a[2]}')
echo "root_temp_pass:"$root_temp_pass
# mysql_secure_installation.sql
cat > mysql_secure_installation.sql << EOF
# Make sure that NOBODY can access the server without a password
UPDATE mysql.user SET Password=PASSWORD('yourrootpass') WHERE User='root';
# Kill the anonymous users
DELETE FROM mysql.user WHERE User='';
# disallow remote login for root
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
# Kill off the demo database
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
# Make our changes take effect
FLUSH PRIVILEGES;
EOF
mysql -uroot -p"$root_temp_pass" --connect-expired-password <mysql_secure_installation.sql
Run Code Online (Sandbox Code Playgroud)
没有必要使用expect
或从源代码中获取 SQL 命令(尽管如果您愿意,您要查找的 C++ 文件位于此处:https://github.com/mysql/mysql-server/blob/7ed30a748964c009d4909cb8b4b22036ebdef239 /client/mysql_secure_installation.cc)
如果您对默认值感到满意mysql_secure_installation
(最安全的选项始终是默认值),那么您可以使用该--use-default
选项跳过大部分交互。mysql_secure_installation
如果未设置,仍然会以交互方式询问您 root 密码,因此您可以通过在调用之前设置它来编写脚本mysql_secure_option
。
这是一个例子:
mysql -u root <<EOF
SET PASSWORD FOR root@localhost = '${ROOT_PASSWORD}';
FLUSH PRIVILEGES;
EOF
mysql_secure_installation -u root --password="${ROOT_PASSWORD}" --use-default
Run Code Online (Sandbox Code Playgroud)
sudo mysql -e "SET PASSWORD FOR root@localhost = PASSWORD('123');FLUSH PRIVILEGES;"
printf "123\n n\n n\n n\n y\n y\n y\n" | sudo mysql_secure_installation
Run Code Online (Sandbox Code Playgroud)
输入 root 的当前密码(输入无)?(我为 root 设置了 123 个)
切换到 unix_socket 身份验证?n
更改root密码?n
删除匿名用户?n
禁止远程root登录?是
删除测试数据库并访问它?是
现在重新加载权限表?是
版本:mysql Ver 15.1 Distrib 10.4.6-MariaDB,用于 osx10.14 (x86_64) 使用 readline 5.1