设为首页 加入收藏

TOP

MySQL用户账户管理与权限管理详解
2018-12-04 00:08:59 】 浏览:105
Tags:MySQL 用户 账户 管理 权限 详解

MySQL 的权限表在数据库启动的时候就载入内存,当用户通过身份认证后,就在内存中进行相应权限的存取,这样,此用户就可以在数据库中做权限范围内的各种操作了。


在权限存取的两个过程中,系统会用到 “mysql” 数据库(安装 MySQL 时被创建,数据库名称叫“mysql”) 中 user、host 和 db 这3个最重要的权限表。


在这 3 个表中,最重要的表示 user 表,其次是 db 表,host 表在大多数情况下并不使用。


user 中的列主要分为 4 个部分:用户列、权限列、安全列和资源控制列。


通常用的最多的是用户列和权限列,其中权限列又分为普通权限和管理权限。普通权限用于数据库的操作,比如 select_priv、super_priv 等。


当用户进行连接时,权限表的存取过程有以下两个过程:


先从 user 表中的 host、user 和 password 这 3 个字段中判断连接的 IP、用户名、和密码是否存在于表中,如果存在,则通过身份验证,否则拒绝连接。
如果通过身份验证、则按照以下权限表的顺序得到数据库权限:user -> db -> tables_priv -> columns_priv。
在这几个权限表中,权限范围依次递减,全局权限覆盖局部权限。上面的第一阶段好理解,下面以一个例子来详细解释一下第二阶段。
为了方便测试,需要修改变量 sql_mode,不然会报错,如下


xxx@localhost,并赋予所有数据库上的所有表的 select 权限


可以发现user表中Select_priv: Y,其他均为N


DB表中则无记录


也就是说,对所有数据库都具有相同的权限的用户并不需要记录到 db 表,而仅仅需要将 user 表中的 select_priv 改为 “Y” 即可。换句话说,user 表中的每个权限都代表了对所有数据库都有权限


这时候发现,user 表中的 select_priv 变为 “N” ,而 db 表中增加了 dbxxx 的一条记录。也就是说,当只授予部分数据库某些权限时,user 表中的相应权限列保持 “N”,而将具体的数据库权限写入 db 表。tablecolumn 的权限机制和 db 类似。


可以看见tables_priv表中增加了一条记录,而在user db columns_priv三个表中没有记录


从上例可以看出,当用户通过权限认证,进行权限分配时,将按照 ==user -> db -> tables_priv -> columns_priv== 的顺序进行权限分配,即先检查全局权限表 user,如果 user 中对应 权限为 “Y”,则此用户对所有数据库的权限都为“Y”,将不再检查 dbtables_privcolumns_priv;如果为“N”,则到 db 表中检查此用户对应的具体数据库,并得到 db 中为 “Y”的权限;如果 db 中相应权限为 “N”,则再依次检查tables_privcolumns_priv 中的权限,如果所有的都为“N”,则判断为不具备权限。


授权 grant


grant不仅可以用来授权,还可以用来创建用户。


授权的语法:


除了 grant_priv 权限外,所有权限在user 表里面都是 “Y”。


在5.7版本后的数据库,密码字段改为authentication_string


user 表中的权限都是“N”,db 表中增加的记录权限则都是“Y”,这样只授予用户适当的权限,而不会授予过多的权限。


本例中的 IP 限制为所有 IP 都可以连接,因此设置为 “%”,mysql 数据库中是通过 user 表的 host 字段来进行控制,host 可以是以下类型的赋值。


注意: mysql 数据库的 user 表中 host 的值为 “%” 或者空,表示所有外部 IP 都可以连接,但是不包括本地服务器 localhost,因此,如果要包括本地服务器,必须单独为 localhost 赋予权限。


这几个权限都是属于管理权限,因此不能够指定某个数据库,on 后面必须跟 *.*,否则会提示错误,如上


那这几个权限是干啥的?
process通过这个权限,用户可以执行SHOW PROCESSLISTKILL命令。默认情况下,每个用户都可以执行SHOW PROCESSLIST命令,但是只能查询本用户的进程。


拥有file权限才可以执行 select ..into outfileload data infile…操作,但是不要把file, process, super权限授予管理员以外的账号,这样存在严重的安全隐患。


super这个权限允许用户终止任何查询;修改全局变量的SET语句;使用CHANGE MASTER,PURGE MASTER LOGS


另外一个比较特殊的


usage权限
连接(登陆)权限,建立一个用户,就会自动授予其usage权限(默认授予)。


该权限只能用于数据库登陆,不能执行任何操作;且usage权限不能被回收,也即``REVOKE用户并不能删除用户。


账号创建好后,可以通过如下命令查看权限:


和已有的 select 权限进行合并


revoke 语句可以回收已经赋予的权限


usagerevoke?


usage 权限不能被回收,也就是说,revoke 用户并不能删除用户。


要彻底的删除账号,可以使用 drop user


创建 MySQL 账号时,还有一类选项称为账号资源限制,这类选项的作用是限制每个账号实际具有的资源限制,这里的“资源”主要包括:


注意:
添加用户或者权限,使用mysql> flush privileges; 刷新权限


具体权限可以参考官网文档


https://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Redis常用五大数据类型 下一篇Oracle之存储过程和MERGE INTO语句

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目