最近需要排查数据库敏感信息,网上找了一些脚本和工具效果都不好,自己瞎写了一个,记录一下:
#!/bin/bash
# 忽略系统表
ignore_db="sys|information_schema|performance_schema|mysql"
# 每张表取前N条数据
limit="50"
# ex: search_info 192.168.1.1 3306 xxxx
function search_info(){
host="$1"
port="$2"
pw="$3"
# 获取所有库名
mysql -h$host -uroot -p$pw -P$port -N -s -e 'show databases' |egrep -v "$ignore_db"|while read db
do
# 获取表名
mysql -h$host -uroot -p$pw -P$port -N -s $db -e 'show tables'|while read table
do
# 获取每张表前N条数据,并判断是否为手机号|身份证
mysql -h$host -uroot -p$pw -P$port -N -s $db -e "select * from $table limit $limit" |egrep '(1(3[0-9]|4[5|7]|5[0-9]|66|[7|8|9][0-9])[0-9]{8})|([0-9]{6}[19|20][0-9]{2}(0[0-9]|10|11|12)(0|1|2|3)[0-9][0-9]{3}[0-9Xx]{1})' -w && echo "${ip}.${db}.$table" >>bad.out || echo "${ip}.${db}.$table" OK
done
done
}
cat config.txt|while read ip port pw
do
echo start
search_info $ip $port $pw
done
config.txt格式:
192.168.1.1 3306 password1
192.168.1.2 3306 password2
评论区