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。
• 在这几个权限表中,权限范围依次递减,全局权限覆盖局部权限。
权限说明
创建用户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;否则无法立即生效