-
最近做等保,反复的有评测机构联系要做MySQL审计,会扔过来一些脚本,要看执行结果。
-
可以写一个这样的脚本,将他们要求执行的语句扔进去。
-
节约点时间
-
vim run_mysql_queries.sh
#!/bin/bash
# --- 配置 ---
# 默认数据库名,如果需要也可以作为参数传入
DB_NAME="dbtest01"
# MySQL 客户端命令,根据你的实际情况修改,如果用密码登录,也在这里改
MYSQL_CMD="mysql --login-path=dba"
# ----------------
# 检查是否传入了 IP 地址和端口
if [ -z "$1" ] || [ -z "$2" ]; then
echo "用法: $0 <IP地址> <端口>"
echo "例如: $0 10.10.0.0.1 3306"
exit 1
fi
TARGET_IP="$1"
TARGET_PORT="$2"
# 根据 IP 和端口动态生成日志文件名
LOG_FILE="output_${TARGET_IP}_${TARGET_PORT}.log"
# 初始化日志文件
echo "当前时间是: $(date)" > "$LOG_FILE"
echo "执行实例:${TARGET_IP}:${TARGET_PORT}" >> "$LOG_FILE"
echo "" >> "$LOG_FILE" # 添加一个空行,使格式更美观
# 定义执行 SQL 并记录日志的函数
# 参数1: SQL 查询语句
execute_sql_and_log() {
local sql_query="$1"
echo "" >> "$LOG_FILE"
echo "" >> "$LOG_FILE"
echo "执行SQL:" >> "$LOG_FILE"
echo "$sql_query" >> "$LOG_FILE"
echo "-------------------------------------------------------------------------------------" >> "$LOG_FILE"
# 执行 mysql 命令并将输出追加到日志文件
# 注意:这里假设 mysqlw 客户端连接成功不会输出到 stderr,错误会输出到 stderr
# 如果需要更健壮的错误处理,可以检查 $?
"$MYSQL_CMD" -h "$TARGET_IP" -P "$TARGET_PORT" "$DB_NAME" -e "$sql_query" >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
echo "警告: 上述 SQL 命令执行可能失败,请检查日志。" >> "$LOG_FILE"
fi
}
# 定义要执行的 SQL 查询数组
SQL_QUERIES=(
"select user, host, plugin from mysql.user;"
"show variables like '%connections_control%';"
"select user,host from mysql.user;"
"show variables like '%password%';"
"show variables like '%timeout%';"
"show variables like '%have_ssl%';"
"show variables where variable_name like 'version';"
"show variables like 'log_%';"
"show variables like '%logs%';"
"show global variables like '%general%';"
"show global variables like 'default_password_lifetime';"
)
# 遍历 SQL 查询数组并执行
for query in "${SQL_QUERIES[@]}"; do
execute_sql_and_log "$query"
done
echo "" >> "$LOG_FILE"
echo "所有SQL执行完毕。" >> "$LOG_FILE"
echo "脚本执行完成,日志已保存到: $LOG_FILE"
-
chmod +x run_mysql_queries.sh。
-
运行脚本:
./run_mysql_queries.sh 10.25.2.1 3306
>> Home