- 浏览: 797234 次
- 性别:
- 来自: 杭州
最新评论
-
137578346:
...
各版本MySQL并行复制的实现及优缺点 -
db_code_peon:
引用而这个“调整”,也不是简单的指针重赋,而是将这个page ...
MySQL源码学习:简述InnoDB的BP LRU策略 -
xtha21:
预申请ID的个数为:大于批量插入记录数的最近一个2的指数值再- ...
MySQL源码学习:innodb_autoinc_lock_mode 下自增id不连续的原因 -
lc15808798846:
奇哥好试了下,好像这个问题在5.7 已经不存在了,SQL不会h ...
autocommit=0引起的业务hang住 -
wangliushui:
Transfer 怎样保证事物的一致性,一个事物关联多个表的 ...
MySQL-Transfer2.2发布
这个问题是从被问到information_schema.user_privilege的IS_GRANTABLE字段问题开始查起的,就先从user_privilege表的显示规则说起。
1、 IS_GRANTABLE字段
用root账号执行如下语句(本文中grant后都接flush privileges, 不赘述)
a) grant all privileges on *.* to `myuser`@localhost with grant option;
b) select user,select_priv from mysql.user where user='myuser'; +------------------------------+----------------------------+ | user | select_priv | +------------------------------+----------------------------+ | myuser | Y | +------------------------------+----------------------------+
c) select PRIVILEGE_TYPE, IS_GRANTABLE from information_schema.user_privileges where grantee like '\'myuser\'@\'localhost\'' and PRIVILEGE_TYPE = ‘SELECT’; +------------------------------+----------------------------+ | PRIVILEGE_TYPE | IS_GRANTABLE | +------------------------------+----------------------------+ | SELECT | NO | +------------------------------+----------------------------+
|
说明: 从b)看myuser已经有了select_priv。而c) 中 IS_GRANTABLE是NO,这不是显示错误。 实际上,IS_GRANTABLE并非表示用户是否“拥有此权限”,而是表示用户是否拥有“将此权限赋予其他用户”的权限。它对应的是mysql.user表中的grant_priv字段,此时为NO。
2、user_privileges的显示规则
当我们创建一个新用户create user myuser2; 时,在mysql.user中看到这个用户的所有权限都为NO,此时user_privileges增加一行
+---------------------+-----------------------+--------------------------+---------------------+ | GRANTEE | TABLE_CATALOG | PRIVILEGE_TYPE | IS_GRANTABLE | | 'myuser2'@'%' | NULL | USAGE | NO |. +---------------------+-----------------------+--------------------------+---------------------+ |
什么时候显示USAGE? 从这篇文章中我们知道对应的显示控制代吗在sql/sql_show.cc。 对应的函数为fill_schema_schema_privileges。
简单分析源码得到规则如下:
PRIVILEGE_TYPE规则:
a) 当该用户没有权限,或只有grant_priv的时候,PRIVILEGE_TYPE显示为USAGE;
b) 否则按顺序显示被赋予的权限,每行一个,这些权限包括
(UPDATE_ACL | SELECT_ACL | INSERT_ACL | DELETE_ACL | CREATE_ACL | DROP_ACL | GRANT_ACL | REFERENCES_ACL | INDEX_ACL | ALTER_ACL | CREATE_TMP_ACL | LOCK_TABLES_ACL | EXECUTE_ACL | CREATE_VIEW_ACL | SHOW_VIEW_ACL | CREATE_PROC_ACL | ALTER_PROC_ACL | EVENT_ACL | TRIGGER_ACL), 但GRANT权限不显示。
IS_GRANTABLE规则:若该用户有grant_priv权限,则在列出的所有行的IS_GRANTABLE都显示YES,否则显示NO。
================================标题党的分割线================================
3、权限控制问题
从上面的分析中我们知道,用户是否拥有给其他用户赋权的权限,取决于这个用户本身是否拥有grant_priv权限。用一个字段控制一批权限,这样就联想到可能有一个“权限混乱“的现象。
首先,授权必然是要有范围限制的。用户A赋权给用户B,这些赋予的权限不能超过A的权限范围。
看以下的操作序列。使用root账户登录。
mysql> grant select,insert,delete,update on *.* to `grant_u2`@localhost ; Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
mysql> select * from information_schema.user_privileges where grantee like '%gran_u%'; Empty set (0.01 sec)
mysql> select GRANTEE, PRIVILEGE_TYPE, IS_GRANTABLE from information_schema.user_privileges where grantee like '%grant_u%'; +--------------------------------+----------------------------+--------------------+ | GRANTEE | PRIVILEGE_TYPE | IS_GRANTABLE | +--------------------------------+----------------------------+--------------------+ | 'grant_u1'@'localhost' | SELECT | YES | | 'grant_u2'@'localhost' | SELECT | NO | | 'grant_u2'@'localhost' | INSERT | NO | | 'grant_u2'@'localhost' | UPDATE | NO | | 'grant_u2'@'localhost' | DELETE | NO | +-------------------------------+-------------------------------+-------------------+ |
说明:上面的操作中,我们给grant_u1赋了查询权限且with grant option. 给grant_u2赋了增删改查权限,但没有grant权限。
从information_schema.user_privileges看出目前权限状态正常。
之后用grant_u1登录, 将select的“赋权”权限赋给grant_u2.
mysql> grant select on *.* to `grant_u2`@localhost with grant option ; Query OK, 0 rows affected (0.00 sec) mysql> select GRANTEE, PRIVILEGE_TYPE, IS_GRANTABLE from information_schema.user_privileges where grantee like '%grant_u%'; +--------------------------------+----------------------------+--------------------+ | GRANTEE | PRIVILEGE_TYPE | IS_GRANTABLE | +--------------------------------+----------------------------+--------------------+ | 'grant_u1'@'localhost' | SELECT | YES | | 'grant_u2'@'localhost' | SELECT | YES | | 'grant_u2'@'localhost' | INSERT | YES | | 'grant_u2'@'localhost' | UPDATE | YES | | 'grant_u2'@'localhost' | DELETE | YES | +-------------------------------+-------------------------------+-------------------+ 5 rows in set (0.00 sec) |
从结果看出,grant_u2用户拥有了对增删改查的赋权权限。这个已经超出了grant_u1的权限范围。
进一步的,再用grant_u2登录,执行grant select,insert,delete,update on *.* to `grant_u1`@localhost with grant option ; 则grant_u1用户也拥有了增删改查的赋权权限。
实际上,root账号设置的权限中,grant_u1、grant_u2都没有对增删改的赋权权限,但经过上述操作后,这两个用户的权限都扩大了,且超过了原有权限的并集。
4、分析
实际上这个问题的根源,就在于MySQL在设计上用一个grant_priv来控制是否有赋权权限,而每个概念上将每个权限分开。导致在grant_u1将“查询赋权”权限赋给grant_u2的时候,附带的将其他权限也带进去了。
评论
发表评论
-
各版本MySQL并行复制的实现及优缺点
2016-01-19 18:02 12146MySQL并行复制已经是老生常谈,笔者从2010年开 ... -
一个mysqldump导出失败的案例分析
2014-06-03 23:16 8286背景 MySQL全量逻辑备份恢复最基础的方法,就是m ... -
MySQL 聚集UDF,计算列表中的奇数总和
2014-06-02 23:08 2928技痒之作 -__- CREATE AGG ... -
autocommit=0引起的业务hang住
2014-05-25 17:53 8500背景 有用户报告一个普通的select 语句被hang住 ... -
一个用户SQL慢查询分析,原因及优化
2014-05-23 03:25 11991问题描述 一个用户反 ... -
一个用户迁移数据库前后的性能差异case
2014-05-21 14:21 3510问题 一个用户问题,数据从ECS迁移到RDS,相同的 ... -
MySQL一个异常查询问题追查
2014-05-16 12:38 4455问题 线上碰到的问题:相同的语句,只是最后的limit行 ... -
Webscalesql代码浏览记录
2014-04-03 18:28 3762浏览了下webscalesql 的代码。目前包含的62个c ... -
Webscalesql代码浏览记录
2014-04-03 18:27 2068浏览了下webscalesql 的代码。目前包含的62个co ... -
Webscalesql代码浏览记录
2014-04-03 18:27 3132浏览了下webscalesql 的代码。目前包含的62个co ... -
MySQL Q&A 解析binlog的两个问题
2014-03-31 17:18 4883连续碰到两个同学问类似的问题,必须要记录一下。 问题 ... -
mymysql与go-mysql-driver的一个区别
2014-01-23 21:16 4963今天要写个工具就想顺便学下go。网上翻了下发现用比较多的是 ... -
MySQL-Transfer2.3发布
2013-12-01 21:17 6472Transfer 2.3发布,下载地址 此版本除了升 ... -
关于MySQL count(distinct) 逻辑的另一个bug
2013-11-28 09:59 6039背景 上一篇博文(链接)介绍了count ... -
Is it a bug in MySQL or in java-connector?
2013-11-19 13:58 3172Description In mysql ... -
关于MySQL count(distinct) 逻辑的一个bug
2013-11-16 22:56 9237背景 客户报告了一个count(d ... -
MySQL-Transfer2.2发布
2013-06-18 12:08 4859Transfer 2.2发布。下载地址 版本说明 ... -
MySQL5.5加主键锁读问题—续
2013-06-14 17:38 2544背景 上一篇说到MySQL 5.5加主键导致 ... -
MySQL5.5加主键锁读问题
2013-06-09 09:30 4707背景 有同 ... -
InnoDB row_id边界溢出验证
2013-05-28 13:34 2724背景 跟同学聊到row_id一个边界问题 ...
相关推荐
"JSP+MYSQL软件缺陷管理系统的设计与实现"是一个基于Web的项目,它利用JSP(JavaServer Pages)作为前端开发技术,MySQL作为后端数据库管理系统,来构建一个高效、可靠的缺陷跟踪和管理平台。下面我们将深入探讨这个...
MySQL数据库的权限系统是其安全性的重要组成部分,它允许管理员精细控制不同用户对数据库资源的访问。MySQL提供了15种不同的权限,包括select、insert、update、delete等基本的数据操作权限,以及index、alter、...
MySQL数据库的权限及其安全缺陷.pdf
SSM+MySQL软件缺陷管理系统设计与实现 随着信息化时代的飞速发展,计算机技术在各行各业的应用日益广泛,软件作为其中的核心部分,其质量直接影响到企业的运营效率和服务质量。软件缺陷管理系统在此背景下应运而生...
基于SSM+MySQL的软件缺陷管理系统是一个用于跟踪和管理软件开发过程中的缺陷和问题的在线平台。...用户权限管理:系统支持多级用户权限管理,可以根据用户角色进行权限的分配和控制,确保数据的安全性和机密性。
传统的访问控制机制存在一些缺陷,例如基于用户的访问控制机制,无法满足复杂的访问控制需求。为此,基于角色的访问控制机制(RBAC)被提出,以提高访问控制的灵活性和安全性。 RBAC机制的核心思想是将访问权限与角色...
设计出一个及时对缺陷进行跟踪、缺陷管理、度量等功能的基于SSM的软件缺陷管理系统,帮助企业及时找到软件缺陷并找到方案进行解决。 本系统一共分为管理员、项目经理、调试员以及解决方案人员四大角色,每个角色所...
设计出一个及时对缺陷进行跟踪、缺陷管理、度量等功能的基于SSM的软件缺陷管理系统,帮助企业及时找到软件缺陷并找到方案进行解决。 本系统一共分为管理员、项目经理、调试员以及解决方案人员四大角色,每个角色所...
7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取SELECT相关信息...
权限控制通常采用角色-权限模型,确保不同用户对缺陷信息有不同的操作权限。日志记录则有助于追踪系统运行状况和问题排查。异常处理则能保证系统在出现错误时,仍能提供友好的反馈信息。 在实际使用中,该系统可能...
7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取SELECT相关...
根据提供的文档信息,我们可以深入探讨基于SSM框架与MySQL数据库构建的软件缺陷管理系统的设计与实现。此系统旨在通过计算机技术提升软件质量,并有效追踪、记录和解决软件中的各种缺陷问题。 ### 一、SSM框架简介 ...
首先,JIRA是一个项目管理工具,广泛应用于敏捷开发领域。它可以通过敏捷看板、缺陷跟踪、...此外,对JIRA和MYSQL的配置都应当考虑安全性问题,确保数据库密码安全、数据库访问权限控制得当,以避免潜在的安全风险。
该系统采用MySQL作为数据库进行数据存储,设计简洁实用,方便企业对软件项目中的缺陷进行全生命周期管理。 适用人群: 系统主要面向软件开发企业的项目经理、调试员和解决方案人员。它帮助企业中的开发团队高效追踪...
7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取SELECT相关信息...
7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取SELECT相关信息...
6. **信息管理**:系统提供信息管理功能,包括用户管理、权限控制和日志记录,确保只有授权的人员能访问和修改缺陷信息,同时记录所有的操作以便审计和追踪。 7. **软件跟踪**:软件跟踪功能允许系统记录缺陷的整个...
本系统一共分为管理员、项目经理、调试员以及解决方案人员四大角色,每个角色所...本站是一个B/S模式系统,采用SSM框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点。