1 创建用户z1并且赋予所有数据库上的所有表的select权限,可以看到,user表中的select_priv是Y,而db表并没有记录。也就是说,对所有数据库都拥有相同权限的用户不需要记录db表。而仅需把user表中的select_priv改为Y即可。
use mysql; select * from host; select * from user; select * from db; -- user 表中主要有用户列、权限列。其中权限列又分为普通权限和管理权限。普通权限主要用来对数据库进行操作 -- 比如select_priv,create_priv等 而管理权限主要用来对数据库进行管理的操作,比如process_priv 以及super_priv等 -- 创建用户z1,并赋予所有数据库上的所有表的select权限 create user z1; grant select on *.* to z1;
2 、将z1上的权限改为只对test1数据库上所有表的select权限,这个时候,发现user表中select_priv变成了N,但是db表中增加了一条test01的记录。从这个例子可以看出,进行权限分配和用户通过权限认证,先user->db->tables_priv->column_priv
2.1 即先检查全局权限表user,如果对应的权限为Y,则此用户对所有数据库的权限都为Y,将不再检查db,tables_priv和columns_priv这些表(对所有的数据库中所有的表都一样)
2.2 如果user表为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限(对某个数据库)
2.3 如果db表为N,则检查tables_priv中此数据库对应的具体的表,取得表中为Y的权限(对某张表)
2.4 如果tables_priv为N,则去查columns_priv这张表,看用户对这张表的哪些字段有权限
use mysql; REVOKE SELECT on *.* from z1; GRANT select ON test01.* to z1; SELECT * from db;
3 用户创建与权限赋予
use mysql; SELECT * from user; -- 创建用户z2,,权限为可以在所有数据库的执行权限,可以给其他用户授权 GRANT all PRIVILEGES on *.* to z2 IDENTIFIED BY '815qza' WITH GRANT OPTION;
下面可以在远程登录服务器看一下,可以远程登录
4 普通权限
-- 创建z3,可以从任何ip连接,权限为对test01库里面的所有表进行select ,update,INSERT和delete操作 -- 其实此权限适用于大多数普通账号。一般的,我们只授予用户适当的权限,不会授予过多全权限 GRANT SELECT,INSERT,UPDATE,DELETE on test01.* to z3 IDENTIFIED BY '815qza';
5 user表中的host为%,表示所有外部ip都可以连接,但是不包括本地服务器localhost,如果要包含本地服务器,必须单独为localhost赋值,所以user表里你看root用户,就有一行记录是单独赋值的。
select * from user WHERE user = 'root';
6 查看权限
SHOW GRANTS for z3;
7 修改mysql用户密码
方法有很多,就不多说了。会一种就可以!下面就是一种,注意修改完要重启数据库才会生效!!!
update user set authentication_string = password('123') WHERE User = 'z3';
8 删除用户
drop user username ,删除用户
drop USER z1;
执行后无需重启数据库,测试登录,发现被拒绝了,权限认证没有通过!!!