<服务>MySQL索引调优和安全权限控制
目录:
索引
什么是索引
索引是用来提高数据库性能的常用工具,就类似书籍的目录一样。一个库如果没有索引就像一本没有书籍的书,读起来非常费劲
索引的原理
索引是建立了针对数据内容的排序结果的指针,根据指针快速定位所要的数据,而不是全表的扫描
索引的设计原理
- 索引一般设置为where子句的列或者连接子句中的列
- 尽量不对基数少的列做索引,例如性别,这样优化的不明显
- 尽可能使用短的索引,尽量指定最小长度,尽量指定最小长度,例如why就能索引到,wh也是只有我,这样可以减少缓存量
- 复合索引前缀特性,索引的顺序很重要,常用限制条件放在前
- 避免出现无用索引
- InnoDB引擎尽量指定主键,常用数据类型较短的数据类型唯一列作为主键例如id
- 避免过度使用索引,浪费资源,避免性别等过度索引,降低写入性能更新性能
- 大表建立索引,小表不建立
账户权限控制
内部开发人员权限分配
- 权限申请流程设置规范,合理
- 办公和测试环境可以开放权限,不过出了问题开发负责,严格控制写权限,读权限内外服务分离。
- 开发人员正式环境数据库权限分配规则,给单独不对外访问的正式从库读权限,并且可以以视图的方式开放访问
- 特殊人员,需要问清要做什么,发邮件回复,注明用户,密码,权限,多次提醒操作注意事项,如果可以代为操作最好
特权账号,由DBA控制,禁止在任何客户端上执行特权账号操作(只能连接localhost)
web账号权限分配
写库账号默认权限select,insert,update,delete,不要给create,alter等权利,更不能给all
- 读库账号默认权限select,配合read-only确保从库非super用户权限是只读的
- 最好专库专账号,不要一个账号管理多个库
- 如果是一体的环境,db权限一定要是都为localhost
- web和数据库分离的服务器授权可以根据web服务器多少按IP或者网段授权
安全性和管理方便,总是相互矛盾等,需要达到一个平衡状态,如何平衡需要根据公司和业务衡量
数据库客户端访问控制
更改默认端口,例如phpadmin的9999,其他客户端同理
- 数据库web client端统一部署在1~2台不对外的服务器上,限制端口只能从办公室内网访问,不做公网域名解析,通过host访问或者内部IP访问,限制IP访问,限制使用web连接的账号管理数据库
- 按开发和相关人员根据职位角色分配合适的管理账号
- 统一所有数据库账号登录入口地址,禁止开发人员私自上传数据管理程序
- 开通VPN,跳板机,只能通过局域网内部IP管理数据库
系统层控制
限制或禁止开发人员SSH ROOT管理,通过sudo细化权限 对配置文件读写权限进行控制,取消非指定服务器的所有phpadmin web端连接,禁止非管理人员管理有数据库的web client权限
读写分离
读写分离不仅安全,还能提高一些效率
数据库管理核心
未雨绸缪,不要停留在制度上,指定完整的架构设计及备份,恢复策略。 定期思考并实战模拟,最好的方法就是模拟一套线上系统的虚拟环境。