目录
一、用户和权限管理
MySQL是多用户的数据库,可以通过授权或撤销权限来控制允许或不允许用户执行的操作。用户从职权上可以分为超级用户和普通用户。在实际应用中,尽量避免应用程序使用root用户直接操作数据库。
MySQL用户与权限管理包括三个管理要素:用户、对象和权限。
1、用户验证的三个基本要素
①查看MySQL用户
MySQL使用用户名、客户端主机和密码三个基本要素来验证用户,也使用这三个要素区别不同的用户。MySQL的用户以记录的形式存放在mysql数据库user表中。
select user,host,authentication_string from mysql_user;
user表示用户名;host字段表示允许用户登录的主机名或ip;authentication_string表示密码。
查询当前所有用户以及相应信息:
select * from user \G;
*_priv表示有相应的权限。
②客户端主机
MySQL使用host字段限制用户连接数据库时可用的主机名或ip,以提高MySQL安全性。只有host字段中指定的主机名或ip才能使用用户名和密码连接数据库。
客户端主机的格式有:
‘%’代表任意字符,‘_’代表一个字符
客户端主机形式 | 示例 |
---|---|
主机名 | localhost |
域名 | mis.ming.com |
IP地址 | 192.168.2.1 |
IP地址加掩码 | 10.1.100.0/255.255.255.0 |
带通配符的域名 | %.ming.com |
带通配符的IP地址 | 192.168.%/192.168.2._ |
完全的通配符 | % |
2、创建用户
一般格式:
create user 'username'@'host' identified by 'password';
username最长16个字符,特殊字符必须使用单引号,密码必须使用单引号。
创建用户:
create user chen@localhost identified by 'chen';
create user yang identified by 'yang';
create user 'tom'@'192.168.2.1' identified by 'tom';
chen和yang能在本地进行连接,tom只能在ip为192.168.2.1的主机进行连接。
3、设置用户密码
一般语法:
set password=password('newpassword');
或set password='newpassword';
修改其他用户密码格式:
set password for 'username'@'host'=password('newpassword');
修改tom的密码:
set password for tom@192.168.2.1='newtom';
4、重命名用户
一般格式:
rename user oldusername to newusername;
rename user newtom to tom@192.168.2.1;
5、删除用户
一般格式:
drop user username;
drop user yang;
6、权限级别
级别 | 通用格式 | 说明 |
---|---|---|
全局级 | *.* | 所有数据库 |
数据库级 | dbname.* | 指定数据库的所有表 |
表级 | dbname.tablename | 指定数据库的指定表 |
列级 | - | 指定表的指定列 |
存储过程级 | dbname.procname | 指定数据库的指定存储过程 |
7、权限类型
分为三类:只读类、修改类和管理类
分类 | 权限 | 级别 | 说明 |
---|---|---|---|
只读类 | select | 全局级、数据库级、表级 | |
修改类 | insert | 全局级、数据库级、表级 | |
update | 全局级、数据库级、表级 | ||
delete | 全局级、数据库级、表级 | ||
drop | 全局级、数据库级、表级 | ||
alter | 全局级、数据库级、表级 | ||
create | 全局级、数据库级、表级 | ||
管理类 | file | 全局级 | 允许用户指示MySQL服务器在服务器主机系统中读取正在执行的所有语句 |
process | 全局级 | 允许用户使用show processlist语句查看客户机正在执行的所有语句 | |
shutdown | 全局级 | 允许用户使用shutdown语句 | |
super | 全局级 | 授予所有特权,但不能向其他用户授予特权 |
8、授权
授权使用grant语句,可以用来创建用户和修改权限。
一般格式:
grant 权限 (colame) on dbname.tablename to username@host idedtified by 'password';
创建zhao用户,可以查询sbbs数据库中cms_user表的id字段。
grant select(id) on sbbs.cms_user to zhao@localhost identified by 'zhao';
使用zhao用户登录数据库,查询
select * from cms_user;
提示权限不足
可以查询id。
使用root用户查看zhao的权限。
select * from tables_priv where user='zhao';
9、查看用户权限
show grants;
show grants for zhao@localhost;
10、撤销权限
使用revoke撤销用户的权限
一般格式:
revoke 权限 (colname) on <dbname>.<tablename> from username@host;
撤销zhao用户的查询权限.
revoke select(id) on sbbs.cms_user from zhao@localhost;
11、授权表
权限级别表 | 说明 |
---|---|
mysql.user | 针对服务器已知的每一个用户的记录 |
mysql.db | 特定数据库 |
mysql.tables)priv | 特定数据库的某个表 |
mysql.columns_priv | 特定数据库特定表的某些列。 |
二、制定数据安全策略
1、数据库级别安全策略
①密码不能过于简单
②避免使用权限过大的用户
③密码以密文方式写入mysql.user表
④避免创建匿名用户。
2、操作系统级别安全策略
①MySQL数据库服务器避免安装其他应用程序
②mysql数据保存在linux下Mysql文件中的user和group,不要授予其他用户权限
3、网络级安全策略
①设置防火墙
②通过Internet连接数据库,应当配置使用SSH或SSL加密协议。
4、业务级安全策略
①监控重要数据表的数据,实时记录相关访问数据。