1.MySQL的权限管理是通过系统数据库mysql中的表来进行的,所以管理权限最直接的方法就是修改相应表的数据

columns_priv表:                                   在字段一级上实现权限管理。

数据权限 组织架构 职位 数据权限管理_数据库

用户User可以通过Host主机访问数据库Db的Table name 表,对其中的Column name字段有Column_priv的访问权限。

每当用户执行操作时,就会比对此表,看用户是否有相应的权限。

db表:                                                  在数据库一级上实现表的管理。

数据权限 组织架构 职位 数据权限管理_权限管理_02


User在主机 Host上对数据库 Db有访问权限,下面的字段定义了都允许什么样的权限。




数据权限 组织架构 职位 数据权限管理_数据权限 组织架构 职位_03



host表:                             在主机的级别上定义操作权限





数据权限 组织架构 职位 数据权限管理_数据权限 组织架构 职位_03





主机Host有对数据库Db的如下访问权限。


tables_priv表:                                          在数据库一级上定义操作权限。



数据权限 组织架构 职位 数据权限管理_数据库_05



procs_priv表:                                     定义是否有存储过程的编写权限。



数据权限 组织架构 职位 数据权限管理_权限管理_06



user表:                                                    用于对用户的权限管理



数据权限 组织架构 职位 数据权限管理_数据权限 组织架构 职位_07



定义了用户User在主机Host的密码Password和允许的权限。


2.MySQL权限管理的执行流程。


当用户发起连接时,首先检查user表,判断主机,用户名,密码是否正确,不正确直接拒绝登陆,正确则成功登入数据库。


对于用户的操作请求,数据库系统依次检查表db---------host----------tables_priv-----------columns_priv所定义的权限,满足db则直接执行,不满足则检查host,    满足host则直接执行,不满足则继续检查tables_priv,依此类推。


3.MySQL用户管理


3.1 添加用户


使用MySQL命令:    create user fei identified by '120406191';


直接向user表中添加一条记录:insert into user(host,user,password) values('%','xiang',password('120406191'));  这种方法添加用户需要重启数据库,不建议采用,但这种方法更容易从原理上明白权限管理的实际意义。


3.2 删除用户


使用MySQL命令:  drop user fei;


直接删除user表的相关记录:delete from user where user='fei';


4.MySQL权限管理

4.1 权限关键字


all                                                                            除grant option的所有权限


select                                                                     查询记录权限


insert                                                                      插入记录权限


delete                                                                     删除记录权限



创建用户权限


创建视图权限


创建表权限


create temporary tables                                     创建临时表的权限


锁定数据表的权限


删除表权限


修改数据表的权限


查看视图的权限


查看数据表的权限


重新装载授权表的权限


重启数据库的权限


授予别的用户权限 的权限


-----------------------------------------------------------------------------------------


线程管理权限


引用外键的权限


获得索引的权限


更改或取消已存储的子程序的权限


获得超级用户的权限


执行存储过程的权限


复制主服务器的权限


复制从服务器的权限


允许用户select.....into outfile和       load  data infile


无任何权限



4.2.权限管理


4.2.1 为新创建的用户分配全部权限


grant all privileges on *.* to 用户名@'%';


*.*的含义是在任意数据库的任意表,*代指所有,%代表任意主机,可以根据实际需要用具体的值代替,但是这样分配的权限不包括将自己获得的权限再分配给别人的权限,如果想要再获得授予别人,上面的语句应该改为;


grant all privileges on *.* to 用户名@'%'  with grant



还可以用grant创建新用户并授予权限:


grant all privileges on *.* to 用户名@‘%’  identified by 'password' with grant option;



限定字段的访问权限:


grant insert(columnname) on dbname.tablename to username@'hostname' identified by 'password' with grant option ;


表示用户usernamame 对 列 columnname 有insert权限


执行存储过程的权限:


grant execute on procedure dbname.tablename  to username@'%';


执行函数的权限:


grant execute on function dbname.tablename  to username@'%';


4.2.2查看权限


查看自己的权限:show grants;


查看其它用户的权限: show grants for username;


4.2.3 回收权限


revoke insert(olumnname) on dbname.tablename from username;


revoke insert on dbname.tablename from username;


revoke all privileges,grant option from username;