MySQL数据库安全权限控制管理思想

magiclake 2015-03-21

web账户授权实战案例
a.生产环境主库用户的账号授权:
GRANT SELECT,INSERT,UPDATE,DELETE ON blog.*TO 'blog'@10.0.0.%' identified by 'oldboy456';
b.生产环境从库用户的授权:
GRANT SELECT ON blog.*TO 'blog'@'10.0.0.%'identified by 'oldboy456';
当然从库除了做SELECT 的授权外,还可以加read-only等只读参数。

2.4产环境读写分离账户设置
给开发人员的读写分离用户设置,除了IP必须要不同外,我们尽量为开发人员使用提供方便。因此,读写分离的地址,除了IP不同外,账号,密码,端口等看起来都是一样的,这才是人性化的设计,体现了运维或DBA人员的专业。
 主库(尽量提供写服务):blog oldboy456 ip:10.0.0.179 port 3306
 从库(今提供读服务):  blog oldboy456 ip:10.0.0.180 port 3306
提示: 两个账号的权限是不一样的
提示:从数据库的设计上,对于读库,开发人员应该设计优先连接读库,如果读库没有,超时后,可以考虑主库,从程序设计上来保证提升用也要根据主库的繁忙程度来综合体验,具体情况都是根据业务项目需求来抉择


3,数据库客户端访问控制
1.更改默认mysql client 端口,如phpadmin 管理端口为9999,其他客户端也是一样的
2:数据库web client端统一部署在1-2台不对外服务Server上,限制ip,及9999端口只能从内网访问。
3.不做公网域名解析,用host实现访问或者内部IP
4phpadmin站点目录独立所有其他站点根目录外,只能由指定的域名或ip地址访问。
5.限制使用web连接的账号管理数据库,根据用户角色设置指定账号访问。
6按开发及相关人员根据职位角色分配管理账号
7:设置指定账号访问(apache/nginx验证+mysql用户两个登录限制)
8.统一所有数据库账号登录入口地址。禁止所有开发私自上传phpadmin等数据库管理等
9开通vpn,跳板机,内部IP管理数据库
系统层控制
1限制或禁止开发人员ssh root 管理,通过sudo细化权限,使用日志审计
2对phpadmin端config等配置文件进行读写权限控制
3:取消费指定服务器的所有phpadmin web 连接端
4.禁止非管理人员管理有数据库web client端的服务器的权限。
5读库分业务读写分离
细则补充:对数据库的select 等大量测试,统计,备份等操作,要在不对外提供select的单独从库执行
主从架构生产环境从服务器分业务拆分使用案例:
M-->s1==对外部用户提供服务(浏览帖子,浏览博客,浏览文章)
-->s2==>对外部用户提供服务(浏览帖子,浏览博客,浏览文章)
-->s3==>对外部用户提供服务(浏览帖子,浏览博客,浏览文章)
-->s2==>对内部用户提供服务(后台访问,脚本任务,数据分析,开发人员浏览)
-->s5==>数据库备份服务(开启从服务器binlog功能,可实现增量备份及恢复)

相关推荐