MySQL优化二(数据库权限)

MySQL数据库权限严格来说并非属于优化范畴,为了保持系列严谨,姑且就这么分配吧。

权限部分包括两大部分,第一:授权认证,即账号密码,可访问来源。 第二: 访问控制,库、表、字段、存储过程及函数的各种粒度的不同操作,例如增、删、改之类。

授权认证

MySQL在权限部分有几个要素,例如用户名, 密码, 端口,可以访问源。看个最简单的例子:

GRANT ALL PRIVILEGES ON *.* TO 'username'@'127.0.0.1' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password';

上面三句命令,用于设定某个用户在三种连接情况下的密码,目前设定的访问控制权限为所有。

% 表示所有源,即只要能够连接到数据库主机,都能连接MySQL服务, 此处可以改成允许的客户端的IP地址,127.0.0.1 和 localhost 都表明只有本机才能连接MySQL服务器。

访问控制

访问控制比较简单,包括如下几个方面:

全局权限
1.数据类的, 例如 select, update, insert, delte 之类
2.结构类的,例如 create, alter, index, drop之类
3.管理类的, 例如 grant, create user, shutdown之类
4.资源管理, 单位小时查询数, 连接数,最大用户连接
库权限

用于控制用户能访问哪些数据库

表权限

用于控制用户能访问哪些表

字段权限

用于控制用户能访问哪些字段

存储过程及函数的权限

用于控制用户可以执行的存储过程或函数

MySQL使用权限授权表来保持用户及权限,每次成功启动MySQL后,这些表将被载入内存,以提高权限过滤的开销,因此如果要直接更改这些表,来修改权限的话,必须要flush一下。

可以使用如下命令查看权限

SHOW GRANTS;
SHOW GRANTS FOR username;

安全与加密

网络访问限制

首先,作为运行MySQL服务的服务器,必须做一些必要的安全措施,例如防火墙策略等,可以限制可以连接该服务器的客户机。譬如有一大片服务器的情况下,只有内网的某一台服务器可以连接登陆至该服务器,不允许互联网其他机器连接。

连接加密

进行ssh连接或者VPN之类的私有网络。

文件系统加密

运行MySQL服务器的宿主机,可以使用加密的文件系统,在MySQL 建立数据库文件时,使用加密的文件系统。

Chroot 环境

简单来讲就是编译安装MySQL的时候,使用prefix定制安装路径,之后使用chroot ,设定虚拟根目录,建立统一的文件系统。目的是隔离MySQL部分文件。