1.MySQL的权限管理是通过系统数据库mysql中的表来进行的,所以管理权限最直接的方法就是修改相应表的数据
columns_priv表: 在字段一级上实现权限管理。
用户User可以通过Host主机访问数据库Db的Table name 表,对其中的Column name字段有Column_priv的访问权限。
每当用户执行操作时,就会比对此表,看用户是否有相应的权限。
db表: 在数据库一级上实现表的管理。
User在主机 Host上对数据库 Db有访问权限,下面的字段定义了都允许什么样的权限。
host表: 在主机的级别上定义操作权限
主机Host有对数据库Db的如下访问权限。
tables_priv表: 在数据库一级上定义操作权限。
procs_priv表: 定义是否有存储过程的编写权限。
user表: 用于对用户的权限管理
定义了用户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;