MySQL权限管理

权限系统工作原理:

MySQL权限系统通过下面两个阶段进行认证:
    (1)对连接的用户进行身份认证,合法的用户通过认证、不合法的用户拒绝连接。
    (2)对通过认证的合法用户赋予相应的权限,用户可以在这些权限范围内对数据库做相应的操作。
        对于身份,MySQL是通过IP地址和用户名联合进行确认的,例如MySQL安装默认创建的用户root@localhost
表示用户root只能从本地(localhost)进行连接才可以通过认证,此用户从其他任何主机对数据库进行的连接都将被拒绝。
也就是说,同样的一个用户名,如果来自不同的IP地址,则MySQL将其视为不同的用户。MySQL的权限表在数据库启动地时候
就载入内存,当用户通过身份认证后,就在内存中进行相应权限的存取,这样,此用户就可以在数据库中做权限范围内的各
 种操作了。

权限表

在权限存取的两个过程中,系统会用到“mysql”数据库(安装MySQL时被创建,数据库名字叫“mysql”)中user、host和db这3个最重要的权限表

 

表名

user

db

host

用户列

 User                   

 Host                  

Host                 

 

 Password               

 Db                    

Db                   

权限列

 Select_priv            

 User                  

Select_priv          

 

 Insert_priv            

 Select_priv           

Insert_priv          

 

 Update_priv            

 Insert_priv           

Update_priv          

 

 Delete_priv            

 Update_priv           

Delete_priv          

 

 Create_priv            

 Delete_priv           

Create_priv          

 

 Drop_priv              

 Create_priv           

Drop_priv            

 

 Reload_priv            

 Drop_priv             

Grant_priv           

 

 Shutdown_priv          

 Grant_priv            

References_priv      

 

 Process_priv           

 References_priv       

Index_priv           

 

 File_priv              

 Index_priv            

Alter_priv           

 

 Grant_priv             

 Alter_priv            

Create_tmp_table_priv

 

 References_priv        

 Create_tmp_table_priv 

Lock_tables_priv     

 

 Index_priv             

 Lock_tables_priv      

Create_view_priv     

 

 Alter_priv             

 Create_view_priv      

Show_view_priv       

 

 Show_db_priv           

 Show_view_priv        

Create_routine_priv  

 

 Super_priv             

 Create_routine_priv   

Alter_routine_priv   

 

 Create_tmp_table_priv  

 Alter_routine_priv    

Execute_priv         

 

 Lock_tables_priv       

 Execute_priv          

Trigger_priv         

 

 Execute_priv           

 Event_priv            

 

 

 Repl_slave_priv        

 Trigger_priv          

 

 

 Repl_client_priv       

 

 

 

 Create_view_priv       

 

 

 

 Show_view_priv         

 

 

 

 Create_routine_priv    

 

 

 

 Alter_routine_priv     

 

 

 

 Create_user_priv       

 

 

 

 Event_priv             

 

 

 

 Trigger_priv           

 

 

 

 Create_tablespace_priv 

 

 

安全列

 ssl_type               

 

 

 

 ssl_cipher             

 

 

 

 x509_issuer            

 

 

 

 x509_subject           

 

 

 

 max_questions          

 

 

 

 max_updates            

 

 

 

 max_connections        

 

 

 

 max_user_connections   

 

 

 

当用户进行连接的时候,权限表的存取过程有以下现个阶段。
• 先从user表中的host、user和passwd这3个字段中判断连接的IP、用户名和密码是否存在于表中,如果存在,则通过身份验证,否则拒绝连接。
• 如果通过身份验证,则按照以下权限表的顺序得到数据库权限:user->db->tables_priv->coloumns_priv。
• 在这几个权限表中,权限范围依次递减,全局权限覆盖局部权限。

权限说明

 

MySQL权限管理

创建用户a3 并授权数据库和操作权限

 

a.使用create方法创建用户然后单独授权权限
create user 'a3'@'%' identified by '123456';
grant all on enterprise.* to a3;
grant all on enterpriseuser.* to a3;
b.使用 GRANT方式创建
grant all privileges on *.* to a3@172.29.4.10;

授予权限:

(%代表所有其他远程机器都可登陆,localhost代表仅本台机器可以登陆,具体ip地址则代表具体哪台机器可登录)

    授予单个权限(select权限)

#不包括 grant option权限
grant select on *.* to a3@'%';  
#包括 grant option权限,这样被授权的用户可以吧这些权限再
grant select on *.* to a3@'%' with grant option;

授权给其他用户

授予所有权限:
#不包括 grant option权限
grant all on *.* to a3@'%';
#包括 grant option权限,这样被授权的用户可以吧这些权限再授权给其他用户
grant all on *.* to a3@'%' with grant option;

撤销权限:

撤销所有权限
#不包括 grant option权限
revoke all on *.*from a3@'%' ;
#包括 grant option权限
revoke all,grant option from a3@'%';

撤销单个权限

#包括 grant option权限
revoke select on *.* from a3@'%';

授权某个库下所有表的所有权限a3 用户

grant all on enterprise.* to a3@'%';

修改后刷新权限

flush privileges;

注意,授权后必须FLUSH PRIVILEGES;否则无法立即生效

 

 

上一篇:mysql绕过root密码登录


下一篇:解决MySQL无法远程访问的3方案