一个用户可以不登录进Mysql 数据库,由两方面的因数决定
1、你是谁:也就是mysql 数据库中记录的用户名和密码,在SQL Server数据库,中只要求说明你是谁就可以登录了,可是mysql 不是这样的它还要看第二条
2、出生:你是京城皇宫里的张三,还是山沟沟里的张三,在mysql 看来你是两个不同的人。
mysql 把这些重要信息记录在mysql.user 表中 (User,Password)-->你是谁 (Host)-->你是那里人(出生地)
发现没有光是root 就有4 个哦。
-------------------------------------------------------------------------------------------------------------------------
我们最终的目的不只是为了连接上mysql 数据库更是为了可以对里面的数据进行操作。面要进行操作我们首先要取得相应的权限!用户的权限记录在如下几张表中
1 mysql.user 它记录了用户的全局权限这个也是最大粒度的权限,这样说了也说不明白,还是来个例子
root 用户的Select_Priv 为Y 说明它可以查询 mysql 任何一个数据库中的任何对象。这么强大的权限如果我只是想把用户的权限控制在某一个数据库中呢!
这个粒度的权限就与mysql.db表对应
2 mysql.db 它记录了哪个用户对哪个数据库有哪些权限,还是老样子直接上例子
看见没有User 列没有记录root 用户哦!那么问题就来了,为毛root 可以查询任何数据库中的表呢?这个里因为记录再了mysql.user表里面,在mysql.user 表中的
Select_Priv = Y 是针对所有数据库的,也就是说当root 运行一查询时,首先去看一下mysql.user 看有没有运行这一查询的权限,如果有就执行,如果没有就去 mysq.db 表中看一下有没有这个权限。看到了没有权限的粒度每小一级就会多一次判断!这可以会影响性能。
3 mysql.tables_priv 上面说了这么多我想这个就不用多说了,看名字就知道了它是表一级的控制。
4 mysql.columns_priv 列级别的粒度控制
5 mysql.proc_priv 存储过程与函数级别的粒度控制