mysql权限表:
mysql.user
mysql.db
mysql.host
mysql.table_priv
mysql.column_priv
由于权限信息数据量比较小,访问又非常频繁,mysql在启动时,就会将所有的权限信息都加载到内存中,并保存在几个特定的结构里。
所以每次手工修改相关权限表之后,都需要执行flush privileges通知mysql重新加载权限信息;但是通过grant、revoke以及drop user命令来修改的权限,则不必手工执行
flush privileges命令,因为这三种操作方式在修改系统权限信息的同时,也会去更新内存中的权限信息。
show grants for 'username'@'hostname'--查看用户权限
global level
此级别的权限信息保存在mysql.user表中
这个级别的权限是针对整个mysqld的,对数据库下的所有表及字段都有效。如果一个权限是在global级别上授予的,则会覆盖其他所有级别的相同权限设置。
database level
数据库级别的权限
针对特定的数据库赋予权限
问题场景:
有一次用grant给一个用户赋予了某一个database的权限,但是当时不知道mysql的权限构成,所以当时一个劲的去user表当中去找,一看没有改变,当时非常郁闷,
以为sql语句错误了,于是去搜去找了好久,不断的实验,还是没有解决,彻底崩溃,后来才发现是在db表当中的。
table level
column level
routine level
当前只有excute以及alter routine两种权限,针对的对象主要是procedure和function
后三种权限使用较少,只是在一些特殊情况下才这样用;另外database level可以在数据库不存在的情况下完成授权。
分享到:
2010-07-13 17:43
浏览 992
分类:数据库
评论