首页 > 代码库 > 数据库的流程,制度,安全优化

数据库的流程,制度,安全优化

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

  1. 制度与流程控制

1.1 项目开发制度流程

开发环境à功能测试à压力测试à阿里云主机上线,通过较为完善的项目开发流程控制,防止很多潜在的问题隐患发生(目前公司只有开发测试直接到生产环境)。

1.2 数据库更新流程

开发人员提交需求à开发主管审核 àDBA审核à执行开发流程的数据库更新测试步骤。

最后在阿里云上线执行。需要说明的是在一开始提交需求,就会同时抄给以上人等。

通过较为完善的数据库更新流程控制,可以防止很多潜在的数据丢失破坏问题发生。

1.3 DBA参与项目数据库设计

    在开发环节上,DBA最好可以参与数据库的设计与审核,从源头上减少降低不良设计及语句的发生,如果有可能可以做所有语句的审核工作,包括select,这个需要评估工作量是否允许。

1.4 各种操作申请流程

1)  开发测试等人员权限申请流程

需要权限直接发邮件并create task到DBA,协商后予以申请权限。

2)  数据库更新执行流程

A. 涉及到生产数据库重大更新,比如订单取消等,发邮件到技术总监以及DBA,判断业务是否允许,完成上述数据库更改。

B. 涉及到生产数据库小规模变更,比如产品要求做刷单操作,直接发邮件给DBA,抄送技术总监和开发负责人等。

3)  DBA定期巡检数据库SQL语句,该优化的SQL提出建议,发邮件给相关开发责任人, 并抄送技术总监。一般提出优化SQL事宜需要1-3个工作日完善,需和开发等协商。

1.5 定期对内部人员培训

定期给开发及相关人员培训,还是从源头上减少降低不良设计及SQL语句的发生,并通过培训告诉大家数据库性能的重要性,让大家提升性能意识。

1)  数据库设计规范及制度。

2)  SQL语句执行优化,性能优化技巧等。

3)  数据库架构设计等内容。

  1. 账户权限控制

2.1 内部开发等人员权限分配

1)  权限申请流程要设置严格点,让需求不明确者知难而退。

2)  开发和功能测试环境可以开放一些权限,阿里云正式环境严格控制数据库写权限,并且读权限和对外业务服务器分离。

3)  开发人员线上数据库权限分配,给单独的不对外服务的正式从库只读权限,不能分配线上正式主从库写权限。程序账号授权该库的SELECT,DML操作。

4)  如公司领导,开通权限时问清楚做什么,发邮件回复,注明主机IP、用户名、密码、权限范围,多提醒操作注意事项。

5)  特殊账号,由DBA专人控制,禁止在任何客户端上执行特殊账号操作(如只能localhost或其他策略)。

6)  临时在生产库申请账号,需要发邮件注明事项,发邮件给DBA。

2.2 Web账户权限分配制度

1)  写库账号默认权限为select,insert,update,delete,不要给建表改表(create,alter)的权限,更不能给all权限。

2)  读库账号默认权限为select(配合read-only参数用)。一定要确保从库是只读的(对所有人员)。

3)  根据需要,最好专库专账号,不要一账号管理多个库。碎库特别多的,根据情况处理。

4)  web和数据库分离的服务器的授权可以根据web服务器数量多少按IP或网段来授权。

5)  安全性和方便管理,是矛盾的,要尽量达到一个平衡的状态,如何使平衡就要根据具体公司和业务来衡量了。

2.3 web账户授权实战案例

  1. 生产环境主库用户的账号授权:
    GRANT SELECT,INSERT,UPDATE,DELETE ON blog.*TO ‘blog‘@10.0.0.%‘ identified by ‘TonyS1$521‘;

说明:这里表示给10.0.0/24的用户blog管理blog数据库的所有表(*表示所有库)只读权限和DML权限。密码为TonyS1$521。

  1. 生产环境从库用户的授权:
    GRANT SELECT ON blog.*TO ‘blog‘@‘10.0.0.%‘identified by ‘ TonyS1$521‘;
    当然从库除了做SELECT 的授权外,还可以加read-only等只读参数。

2.4 生产环境读写分离账户设置

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

  1. 数据库客户端访问控制

3.1 只允许特定IP和账号使用,要登记清楚。

3.2 限制使用web连接的账号管理数据库,根据用户角色设置指定账号访问。

3.3 按开发及相关人员根据职位角色分配管理账号。

3.4 统一所有数据库账号登录入口地址。禁止所有开发私自上传等数据库管理等。

3.5 远程维护主机和数据库:开通vpn,跳板机,内部IP等管理数据库。

  1. 系统层控制

4.1 开发环境、生产环境限制或禁止开发人员ssh root 管理,通过sudo细化权限,使用日志审计。

4.2 禁止非管理人员管理有数据库web client端的服务器的权限。

  1. 读库分业务读写分离

细则补充:对数据库的select 等大量测试,统计,备份等操作,要在不对外提供select的单独从库执行。因为在主库上执行有表锁(如果访问数据表很大时)。

主从使用规则

5.1 在master上主要操作为DML、DDL和部分SELECT操作‘

5.2 在slave上主要是SELECT查询操作。

  1. 定期巡检

6.1 慢查询日志分析;白名单机制à上线前审核所有SQL;

6.2 定期检查数据库内存使用命中率;

6.3 定期检查主从复制是否一致;

6.4 定期做好备份恢复测试à检查数据库备份文件的有效性;

6.5 定期检查主从数据库中数据表设计是否有多余索引;

6.6 定期检查数据库锁情况;

6.7 分析数据库TPS和QPS情况;

6.8 分析数据库主机资源使用比率à内存、CPU、磁盘I/O阻塞、网络等。

数据库的流程,制度,安全优化