之所以想写这篇文章,是因为在工作中,经常被MySQL的用户授权问题折腾一下.日积月累....忍不住吐槽一下.
MySQL的安全包括很多方面,主要分为内部安全,外部安全及数据传输安全. 内部安全指MySQL的启动和安装目录权限,避免其他用户进入目录,随意访问数据. 外部安全指网络访问,其中用户授权是重点,也是接下来我要吐槽的. 加密传输,这个不多说,大部分数据库处于内网,很少有人使用.mysql库的user表,是最常用来查看权限的,例如用下面的SQL查看当前实例有多少个授权用户和某一个用户的权限
SELECTuser,host,passwordFROM mysql.user;
SHOW GRANTS FOR 'username'@'hostname';
与精确到IP地址唯一不同的地方,便是"登录到任意一台,还是指定一台",这其中的安全与效率问题,需要大家根据自己的环境,折中考虑授权策略.自动化脚本1. 脚本运行在python2.7环境中.2. 如果grant.ini配置文件不存在,则会自动生成.配置文件说明如下:
[proposer]
#申请人邮件地址
to_email =
# 抄送地址
cc_email =
[server]
# 登录目标数据库主机的用户名
srv_user =
# 数据库主机名
srv_host = db1
# 服务器的密码(禁止填写)
#srv_pwd =
[db]
# 登录数据库的用户名
db_user = xxxx
# 通过IP和端口连接
db_host = 127.0.0.1
db_port = 3306
# 对程序提供的ip(vip)地址
db_ip_writer = 192.168.250.1
#db_ip_reader =
# 登录数据库的密码(禁止填写)
#db_pwd = xxx
[grants]
# 添加的权限
permission = UPDATE,DELETE,INSERT,SELECT
# 库范围
database = *
# 表范围
table = *
# 添加的用户名
user = test1
# 允许连接的主机
host = 127.0.0.1,192.168.250.1,192.168.250.2
# 连接的密码(不需要填写,脚本会自动生成16位的密码,由Aa-Zz,0-9组成),追加用户授权时,可修改为加密的密文.
#password =
# 其他
#others =