mysql 权限控制
mysql 权限控制在逻辑上分成2个模块:
1,用户管理模块。
2,访问控制模块。
用户管理模块主要负责用户登录连接的基本控制。访问控制模块则针对进入mysql主机的用户所发出的命令进行权限控制。
mysql的权限系统的信息存储在mysql.user,mysql.db,mysql.host,mysql.tables_priv,mysql_columns_priv几个表中,因为mysql在监听的过程中,
需要提供大量的mysql的权限检测,所以mysql在启动的时候,将这几个表的信息载入到内存中,所以手工更新权限表以后,
需要使用flush privileges 重新加载权限表。也可以通过grant,revoke,drop user,create user 来直接操作权限,这样可以操作权限表并直接载入到内存。
mysql权限可以分为
全局级,针对整个mysql实例 mysql.user
数据库级,针对实例中的单个数据库 mysql.db
表级,针对数据库的单个表 mysql.tables_priv
列级,针对表中的列, mysql.columns_priv
存储引擎级,针对存储引擎。 mysql.proc
另外mysql.host与其他的权限表不同,需要手动update,delete,insert 来修改数据表,而且单独的mysql.host是没有意思,必须和mysql.db配合使用才有意思,
tony@'localhost'
select id from test.t1 where user = 'abc';
在mysql.user查找有 user=tony,host=localhost,但是全局权限没有通过,则会查找mysql.db表,
在mysql.db中没有查找没有权限,并且在db表中发现有db=test,user=tony,会尝试查找mysql.host有没有db=test,host='localhost',如果没有则
退出,如果有则再次查找mysql.db的select_priv列和mysql.host的select_priv为Y。如果则退出
然后在查找表级,和列级。
阅读(3191) | 评论(0) | 转发(0) |