mysql 权限控制具体解释

简介:

概述

mysql权限控制在不同的上下文和不同的操作水平上都能够进行控制,他们包括例如以下几个 
** 管理权限能够同意用户管理mysql server的操作。

这些权限控制是全局的,不是针对某个特定的数据库的 
** 数据库权限相应到一个数据库和里面的对象。这些权限被用来控制特定的数据库或者全局的,他们能够应用到全部的数据库 
** 数据库对象的权限相应到数据库表,索引。视图。和存储过程,能够对数据库内部的某个对象进行授权控制。

权限的存储位置

** 账号权限信息被存储在mysql数据库的user,db,tables_priv ,columns_priv ,procs_priv 表中。 
** mysql启动的时候读取这些信息到内存中去。或者在权限变更生效的时候,又一次读取到内存中去

mysql 账号管理

mysql 账号名字由username和主机名组成。这样能够同意同已用户在不同主机上分别控制权限。

这一部分描写叙述怎样分配账户名字包括特定的值和模糊 
匹配规则,在sql语句中,create user, grant ,set password的时候。会用到这些规则: 
- ‘user_name’@’host_name’ 就是账户名字的语法规则 
- 只包括username的账号等同于 ‘username’@’%’ 
- 假设username是合法的字符,username和主机名不必用引號引起来。

在你的username包括’-‘这种字符的时候,须要用引號引起来。或者说主机名有 
通配符的时候须要引起来。 
- 引號能够用单引號也能够用双引號。 
- 主机和username必须分别被引號括起来。假设必须要括的话。 
mysql在mysql数据库中分别用两个列去存储username和主机名: 
- 用户表每一个账户一行记录,此表也表示了账号有哪些全局权限。 
- 其它授权表表示了账号拥有的数据库和数据库内的对象。这些表都实username和主机列。每行的账户信息和user表的账户信息是奕扬的。


username和主机名能够包括特殊字符或者通配符,以下是这些规则: 
username要么是一个非空字符串字面上必须匹配连接字符串中指名的username,或者一个空字符串就会匹配人户username。空username是一个匿名用户。 
主机名也能够又好多形式。或者通配符: 
- 主机名能够是一个IP地址或者一个localhost样的字符串。 
- %和sql中的like的效果是一样的。比如 ’%.mysql.com’ 就会匹配 a.mysql.com.

权限控制阶段1:连接校验

当你尝试去连接到mysqlserver,server基于以下两点条件去接受或者拒绝连接: 
- 你的身份标识以及正确的password 
- 你的账号是否被锁定了 
server先校验password是否正确,然后校验是否锁定。

不论什么一个步骤失败,server将会拒绝连接。

假设通过校验。server接受连接。然后进入第二阶段而且等候请求。 
认证检查先检查user表的三个列。host,user,password。锁定状态是在user表的account_locked列中记录着的。账号锁定状态能够通过alter user语句来变更。 
你的身份由两部分来组成,你连接的客户主机以及你的mysqlusername。假设username不空,则必须全字符匹配才干够,假设username是空的,则匹配不论什么用户。假设用户表匹配到一个空username,这个用户被觉得是一个匿名用户。二不是客户实际提供的。这意味着空username是用来进一步检查用的也就是阶段2. 
password能够为空,这个不是一个通配符。不意味着匹配不论什么password。它的意思是用户必须无password连接。假设服务起授权一个客户都安使用一个插件。这样 
该插件实现的认证体系也许没实用password列。在这种情况下,外部password也能够用来去认证mysqlserver。 
非空password都是加密存储的,mysql没有存储不论什么明文password。而且用户提供的password也是被加密的。这个加密的password后来在连接过程中,来检查password是否正确。 
从mysql的观点来看,加密的password才是真正的password,所以不要告诉不论什么人这个加密的password。


假设在user表中有多行被匹配,server必须决定用哪一个,它的规则是这种: 
- 不论什么时候server读取用户表到内存中的时候,它会排序。 
- server检查的侍奉server按行顺序去检查 
- server使用第一个匹配的行 
server排序的规则是无通配符的在前面,统配的在后面。

权限控制阶段2:请求校验

当通过了连接校验,你和server建立了连接后,server进入权限控制的第二个阶段。你的每一个请求,server决定出你想做什么操作,然后检查你是否有 
权限去做。此时。grant 表的privilege列就该出场了。这些列能够出自 user,db,tables_priv,columns_priv,procs_priv。不再细讲这些表了。

什么时候去权限变更生效

当server启动的时候,grant表的数据被读入内存。

假设你使用账户管理语句去更新权限控制,server将会知道这些变更,然后又一次读取它们。假设你 
直接用sql语句去更新这些表,你的变更不会生效,直到你又一次启动server或者你告诉server去重建缓存。


你能够通过运行一个刷新权限操作来通知server重建缓存。以下三个语句都能够达到效果: 
- flush_privileges 
- mysqladmin_flush-privileges 
- mysqladmin_reload 
假设启动參数是 –skip-grant-tables ,那么server不再校验不论什么权限,非常不安全。







本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5208955.html,如需转载请自行联系原作者


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
SQL 关系型数据库 MySQL
⑤ 【MySQL】DCL语句 —— 用户管理、权限控制
⑤ 【MySQL】DCL语句 —— 用户管理、权限控制
197 0
|
关系型数据库 MySQL 数据库
认真学习MySQL中的角色权限控制
认真学习MySQL中的角色权限控制
289 0
|
关系型数据库 MySQL 数据库
mysql的用户管理和权限控制
本文介绍了MySQL中用户管理的基本操作,包括创建用户、修改密码、删除用户、查询权限、授予权限和撤销权限的方法。
478 2
|
关系型数据库 MySQL 数据库
【MySQL-10】DCL-数据控制语言-【管理用户&权限控制】 (语法语句&案例演示&可cv案例代码)
【MySQL-10】DCL-数据控制语言-【管理用户&权限控制】 (语法语句&案例演示&可cv案例代码)
【MySQL-10】DCL-数据控制语言-【管理用户&权限控制】 (语法语句&案例演示&可cv案例代码)
|
SQL 关系型数据库 MySQL
MySQL数据库——SQL(4)-DCL(管理用户、权限控制)
MySQL数据库——SQL(4)-DCL(管理用户、权限控制)
197 1
|
SQL 关系型数据库 MySQL
【MySQL】脏读、不可重复读、幻读介绍及代码解释
【MySQL】脏读、不可重复读、幻读介绍及代码解释
|
关系型数据库 MySQL 数据库
MySQL技能完整学习列表9、用户管理和权限控制——1、创建和管理用户——2、权限授予和撤销
MySQL技能完整学习列表9、用户管理和权限控制——1、创建和管理用户——2、权限授予和撤销
154 0
|
存储 SQL 缓存
万字长文~vue+express+mysql带你彻底搞懂项目中的权限控制(附所有源码)
万字长文~vue+express+mysql带你彻底搞懂项目中的权限控制(附所有源码)
423 0
|
关系型数据库 MySQL 数据库
mysq优化---mysql执行计划解释、优化查询、数据库结构、服务器
mysq优化---mysql执行计划解释、优化查询、数据库结构、服务器
141 0
|
存储 关系型数据库 MySQL
MySQL的临时表以及视图与存储过程、触发器等功能概念详细解释说明以及它们的使用方法举例?
MySQL的临时表以及视图与存储过程、触发器等功能概念详细解释说明以及它们的使用方法举例?

推荐镜像

更多