Mysql(11)_Mysql权限与安全

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;

执行后无需重启数据库,测试登录,发现被拒绝了,权限认证没有通过!!!

原文地址:https://www.cnblogs.com/sunnybowen/p/10089633.html