数据库除了数据管理之外,安全管理也是很重要的部分,其中的用户权限管理可以有效保证数据的安全访问,防止数据被非必要用户泄露、修改或删除。因此,MySQL提供了用户管理来保证数据的安全性。
MySQL安全管理通过创建用户、用户授权、用户登录3个步骤的用户管理来实现。MySQL安全系统非常灵活,可以通过命令或界面化登录,而用户权限也可以从数据库、表、列及其他数据库对象的不同授权来达到,既满足用户的需求,又限制用户不能超出访问、操作的权限。
MySQL 通过权限表来控制用户对数据库的访问,MySQL 数据库在安装时会自动
安装多个数据库。MySQL 权限表存放在名称为 MySQL 的数据库中。常用的权限表有
user、db、host、 table _ priv、columns_ priv 和 procs _ priv。
(1)user 权限表。user 是MysQL 中最重要的一个权限表,user 列主要分为 4个
部分:用户列、权限列、安全列和资源控制列
①用户列:用户登录时通过表中的 Host、User 和Password 列判断连接的卫、用
户名称和密码是否存在于表中来通过身份验证或拒绝连接
② 权限列:user 表中包含多个以“
priv” 结尾的字段,这些字段决定了该用户
的权限,既包括查询权限、插人权限、更新权限、删除权限等普通权限,也包括关闭
服务器和加载用户等高级管理权限。
③ 安全列:ssl 《加密)、x509(标识用户)开头的字段,以及 plugin 和 authentication
string 字段(验证用户身份、授权的插件)。
④资源控制列:max (最大允许次数,。表示无限制)开头的字段。
max_ questions: 表示每小时允许执行查询数据库的次数。
max_ updates:表示每小时允许执行更新数据库的次数。
max _ connections:表示每小时允许执行连接数据库的次数
max _ user _ conntions:表示单个用户同时连接数据库的次数。
(2) db、host 权限表。db权限表存储用户在各个数据库上的操作权限,决定哪些
用户可以从哪些主机访问哪些数据库。
host 权限表是db 权限表的扩展,配合 db权限表对给定主机上数据库级操作权限
做更细致的控制。host 权限表很少使用,只有在 db表的范围内扩展一个条目时才会
用到。
(3) table_ priv权限表。记录数据表级别的操作权限。table_ priv 权限表与 山权
限表相似,不同之处是它用于数据表而不是数据库。
(4)columns_priv 权限表。记录数据字段级别的操作权限。columns_ priv权限
表的作用与table_ priv权限表类似,不同之处是它针对某些表的特定字段的权限。
(5)procs_ priv 权限表。该权限表存储用户在存储过程和西数上的操作权限。
二、添加用户可以通过create user、insert 和 grant 语句来实现
create user <'用户名'>@<'主机'>[identified by [password] [<'密码'>]];
insert into mysql.user(user,host,password)
values (<'用户名'>,<'主机'>,password(<'密码'>));
说明:通常语句只能添加host、user 、password 字段的值,分别表示user数据表中的主机名字段、用户名字段和密码字段。
新添加的数据库用户既不允许访问其他用户的数据库,也不能创建自己的数据库,
只有在授子了相应的权限后才能访问或创建数据库,为满足 MysQL 服务器的安全需要
考虑以下内容
①多数用户只需要对数据表进行读、写操作,只有少数用户需要创建、删除数
据表。
②某些用户需要读、写数据而不需要修改数据。
③ 某些用户允许添加数据而不允许删除数据。
④管理员用户需要有管理用户的权力,而其他用户则不需要。
⑤某些用户 允许通过存储过程来访问数据,而不允许直接访问数据表。
1.授予用户权限
grant语句给用户授权:
grant 权限 on 库名.表名to"用户名"回”主机号";
grant语句创建用户并授权:
grant 权限on 库名.表名to"用户名"@“主机号〞identified by “密码”;
杈限 create, drop, insert, update, delete,select
2.查看用户权限
查看当前用户权限
show grants;
查看指定用户权限
show grants for "用户名"@"localhost"\G;
3.回收用户权限
revoke语句回收用户部分权限:
revoke 权限on 库名.表名from “用户名"回"主机号";
revoke语句回收用户全部权限:
revoke al1 privileges, grant option from “用户名"回“主机号";