<服务>MySQL索引调优和安全权限控制

时间:Jan. 11, 2017 分类:

目录:

索引

什么是索引

索引是用来提高数据库性能的常用工具,就类似书籍的目录一样。一个库如果没有索引就像一本没有书籍的书,读起来非常费劲

索引的原理

索引是建立了针对数据内容的排序结果的指针,根据指针快速定位所要的数据,而不是全表的扫描

索引的设计原理

  1. 索引一般设置为where子句的列或者连接子句中的列
  2. 尽量不对基数少的列做索引,例如性别,这样优化的不明显
  3. 尽可能使用短的索引,尽量指定最小长度,尽量指定最小长度,例如why就能索引到,wh也是只有我,这样可以减少缓存量
  4. 复合索引前缀特性,索引的顺序很重要,常用限制条件放在前
  5. 避免出现无用索引
  6. InnoDB引擎尽量指定主键,常用数据类型较短的数据类型唯一列作为主键例如id
  7. 避免过度使用索引,浪费资源,避免性别等过度索引,降低写入性能更新性能
  8. 大表建立索引,小表不建立

账户权限控制

内部开发人员权限分配

  1. 权限申请流程设置规范,合理
  2. 办公和测试环境可以开放权限,不过出了问题开发负责,严格控制写权限,读权限内外服务分离。
  3. 开发人员正式环境数据库权限分配规则,给单独不对外访问的正式从库读权限,并且可以以视图的方式开放访问
  4. 特殊人员,需要问清要做什么,发邮件回复,注明用户,密码,权限,多次提醒操作注意事项,如果可以代为操作最好
  5. 特权账号,由DBA控制,禁止在任何客户端上执行特权账号操作(只能连接localhost)

    web账号权限分配

  6. 写库账号默认权限select,insert,update,delete,不要给create,alter等权利,更不能给all

  7. 读库账号默认权限select,配合read-only确保从库非super用户权限是只读的
  8. 最好专库专账号,不要一个账号管理多个库
  9. 如果是一体的环境,db权限一定要是都为localhost
  10. web和数据库分离的服务器授权可以根据web服务器多少按IP或者网段授权
  11. 安全性和管理方便,总是相互矛盾等,需要达到一个平衡状态,如何平衡需要根据公司和业务衡量

    数据库客户端访问控制

  12. 更改默认端口,例如phpadmin的9999,其他客户端同理

  13. 数据库web client端统一部署在1~2台不对外的服务器上,限制端口只能从办公室内网访问,不做公网域名解析,通过host访问或者内部IP访问,限制IP访问,限制使用web连接的账号管理数据库
  14. 按开发和相关人员根据职位角色分配合适的管理账号
  15. 统一所有数据库账号登录入口地址,禁止开发人员私自上传数据管理程序
  16. 开通VPN,跳板机,只能通过局域网内部IP管理数据库

    系统层控制

限制或禁止开发人员SSH ROOT管理,通过sudo细化权限 对配置文件读写权限进行控制,取消非指定服务器的所有phpadmin web端连接,禁止非管理人员管理有数据库的web client权限

读写分离

读写分离不仅安全,还能提高一些效率

数据库管理核心

未雨绸缪,不要停留在制度上,指定完整的架构设计及备份,恢复策略。 定期思考并实战模拟,最好的方法就是模拟一套线上系统的虚拟环境。