用户与数据库服务器交互数据,分为两个阶段:
(1)你有没有权连接上来
(2)你有没有权执行本操作
1、你有没有权连接上来
服务器如何判断用户有没有权连接上来?
依据:
1)你从哪里来?host
2)你是谁?user
3)你的密码是多少?password
用户的这三个信息,存储在mysql库中的user表中
2、你有没有权执行本操作
在mysql中,有一个库是mysql库,在这个库中有三个表,一个是user表,user表中存储了所有用户的权限信息。一个是db表,db表存储的是所有用户在数据库层的权限信息。一个是tables_priv表,tables_priv表存储的是所有用户在表层的权限信息。
用户登录,user表首先能限制用户登录,其次还保存了该用户的全局权限,如果该用户没有任何权限,那么将从db表中查找该用户是否有某个数据库的操作权限,如果都没有,将从table_priv表中查找该用户是否有某个表的操作权限,如果有,则该用户可以按照已有的权限来操作该表。
一、管理用户
1、查看用户
首先切换到MySQL数据库
use mysql;
查看所有用户
select * from user;
2、创建用户
语法:create user '用户名'@'主机名' identified by ‘密码’;
create user 'zhangsan'@'localhost' identified by '123456';
3、修改用户密码
语法:update user set password=password('新密码') where user='用户名';
update user set password=password('123') where user='zhangsan';
修改完密码之后需要刷新以下,否则密码不会被修改,执行以下语句刷新:
flush privileges;
4、删除用户
语法:drop user '用户名'@'主机名';
drop user 'zhangsan'@'localhost';
二、权限管理
1、查询权限
语法:show grants for '用户名'@'主机名';
show grants for 'root'@'localhost'; show grants for 'zhangsan'@'localhost';
2、授予权限
语法:grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
例如:给张三用户授予所有的权限,在任意数据库任意表上
grant all on *.* to 'zhangsan'@'localhost';
例如:给李四用户授予访问wgy数据库demo表查询的权限
create user 'lishi'@'localhost' identified by '123456'; grant select on wgy.demo1 to 'lishi'@'localhost';
3、撤销权限
语法:revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
例如:撤销张三用户的所有权限
revoke all on *.* from 'zhangsan'@'localhost';
例如:撤销李四用户访问wgy数据库demo表查询的权限
revoke select on wgy.demo1 from 'lishi'@'localhost';
常用权限:all、create、drop、select、insert、delete、update