一, 首先我们需要来看一下 MySQL 默认数据库里面的四张表 (user,db,tables_priv,columns_priv).
1,user 表 (用户层权限)
因为字段太多, 只截取了一部分. 首先登陆的时候验证 Host,User,Password 也就是 ip, 用户名, 密码是否匹配, 匹配登陆成功将会为登陆者分配权限, 分配权限的顺序也是按照上面四张表的排列顺序进行的, 举个例子, 如果 user 表的 Select_priv 为 Y 说明他拥有所有表的查找权限, 如果为 N 就需要到下一级 db 表中进行权限分配了. 其中的 % 是通配符, 代表任意的意思.
2,db 表 (数据库层权限)
来到 db 表之后会匹配 Host,User 然后会根据 Db 字段对应的表进行权限分配, 像 Select_priv 这些字段对应的权限大家应该都能看出来是对应着什么权限了吧, 这里不细说了 (不偷懒, 举个例子 Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv 分别代表着查询, 增加, 更新, 删除, 创建, 销毁). 其中 Y 代表这拥有此项权限, N 则代表没有此项权限.
3,tables_priv 表 (表层权限)
与上面一样, 这是通过 Host,Db,User,Table 来进行定位到表层的一个权限分配. 不过它只有 Table_priv 和 Column_priv 两个字段来记录权限.
4,columns_priv 表 (字段层权限)
顾名思义, 字段层权限, 通过 Host,Db,User,Table,Column 来进行定位到字段层的一个权限分配, 只有 Column_priv 来记录权限.
二, 使用 grant 命令来分配权限
大致格式: grant 权限 on 数据库对象 to 用户 identified by 密码
我们通过两条命令来解读下:
grant all on test.* to 'root'@'%' identified by '123456' with grant option;
上面这条命令的意思是给 [email protected]% 这个用户对应的 test 数据库分配所有操作权限, identified by 是需要进行的一个密码认证. 把 all 换成 USAGE 就表示这个用户除了登陆啥都干不了.
grant select, insert, update, delete on test.* to 'root'@'%' identified by '123456' with grant option;
上面这条命令则是给 [email protected]% 这个用户对应的 test 数据库分配了增删改查的操作权限.
查看某个用户的权限: show grants for 'root'@'%';
查看当前用户: SELECT CURRENT_USER();
---------------------
来源: http://www.bubuko.com/infodetail-3147880.html