- 浏览: 538215 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
c__海棠依旧:
很强,对于我这个新手很容易理解,准们登录来给你点赞的!
BeanFactory和FactoryBean -
hudazheng:
很清晰!
X86、X64和X86_64区别 -
hugh.wang:
...
BeanFactory和FactoryBean -
CB00J:
...
Executor框架和线程池 -
Arbow:
请教一个问题。现在互联网业务的数据库通常用分片方式来连接一组数 ...
BoneCP源码——概述
MySql身份认证是通过IP地址和用户名联合认证的,如root@localhost表示用户root只能从本地(localhost)进行连接才能通过认证,也就是说,同一个用户名,如果来自不同的IP,MySql将其视为不同的用户。
在权限存取的过程中,系统会用到mysql库的user、host、和db这3个重要的权限表,user表最重要,host表大多数情况不并不使用到,user表中主要分为4个部分,用户列、权限列、安全列、资源控制列,user表定义如下:
CREATE TABLE `user` ( `Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '', `User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '', `Password` char(41) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '', `Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Drop_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Reload_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Shutdown_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Process_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `File_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Grant_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `References_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Index_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Alter_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Show_db_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Super_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Lock_tables_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Execute_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Repl_slave_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Repl_client_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Create_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Show_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Create_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Alter_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Create_user_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Event_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `Trigger_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', `ssl_type` enum('','ANY','X509','SPECIFIED') CHARACTER SET utf8 NOT NULL DEFAULT '', `ssl_cipher` blob NOT NULL, `x509_issuer` blob NOT NULL, `x509_subject` blob NOT NULL, `max_questions` int(11) unsigned NOT NULL DEFAULT '0', `max_updates` int(11) unsigned NOT NULL DEFAULT '0', `max_connections` int(11) unsigned NOT NULL DEFAULT '0', `max_user_connections` int(11) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`Host`,`User`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges' ;
当用户进行连接的时候,权限表的存取过程有以下两个阶段:
*先从user表中的host、user、和password这3个字段中判断用户连接的IP、用户名和密码是否存在于表中,如果存在则通过验证,否则不通过;
*如果通过身份验证,则按照以下权限表的顺序得到用户的权限:user->db->tables_priv->columns_priv。
如创建用户test@localhost,并赋予所有数据库上的所有表的select权限:
mysql> GRANT SELECT ON *.* TO test@localhost; Query OK, 0 rows affected (0.03 sec) mysql> SELECT * FROM user WHERE user='test' AND host='localhost' \G; *************************** 1. row *************************** Host: localhost User: test Password: Select_priv: Y Insert_priv: N Update_priv: N Delete_priv: N Create_priv: N Drop_priv: N Reload_priv: N Shutdown_priv: N Process_priv: N File_priv: N Grant_priv: N References_priv: N Index_priv: N Alter_priv: N Show_db_priv: N Super_priv: N Create_tmp_table_priv: N Lock_tables_priv: N Execute_priv: N Repl_slave_priv: N Repl_client_priv: N Create_view_priv: N Show_view_priv: N Create_routine_priv: N Alter_routine_priv: N Create_user_priv: N Event_priv: N Trigger_priv: N ssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0 max_updates: 0 max_connections: 0 max_user_connections: 0 1 row in set (0.00 sec)
在查看db表:
mysql> SELECT * FROM db \G;
并没有发现db表中没有刚才操作的记录,而user表中的select_priv列为Y,说明对所有数据库都据有相同的权限的用户记录并不记录到db表中,也就是说user表中的每个权限都代表对所有数据库都有的权限。
将test@localhost上的权限改为只对db1数据库上的所有表具有select权限:
mysql> REVOKE SELECT ON *.* FROM test@localhost; Query OK, 0 rows affected (0.00 sec) mysql> GRANT SELECT ON db1.* TO test@localhost; Query OK, 0 rows affected (0.00 sec) mysql> SELECT * FROM user WHERE user='test' AND host='localhost' \G; *************************** 1. row *************************** Host: localhost User: test Password: Select_priv: N Insert_priv: N Update_priv: N Delete_priv: N Create_priv: N Drop_priv: N Reload_priv: N Shutdown_priv: N Process_priv: N File_priv: N Grant_priv: N References_priv: N Index_priv: N Alter_priv: N Show_db_priv: N Super_priv: N Create_tmp_table_priv: N Lock_tables_priv: N Execute_priv: N Repl_slave_priv: N Repl_client_priv: N Create_view_priv: N Show_view_priv: N Create_routine_priv: N Alter_routine_priv: N Create_user_priv: N Event_priv: N Trigger_priv: N ssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0 max_updates: 0 max_connections: 0 max_user_connections: 0 1 row in set (0.00 sec) ERROR: No query specified mysql> SELECT * FROM db WHERE Db= 'db1' \G; *************************** 1. row *************************** Host: localhost Db: db1 User: test Select_priv: Y Insert_priv: N Update_priv: N Delete_priv: N Create_priv: N Drop_priv: N Grant_priv: N References_priv: N Index_priv: N Alter_priv: N Create_tmp_table_priv: N Lock_tables_priv: N Create_view_priv: N Show_view_priv: N Create_routine_priv: N Alter_routine_priv: N Execute_priv: N Event_priv: N Trigger_priv: N 1 row in set (0.00 sec)
发现user表中的select_priv为N,而db表中新增了Db为db1的一条记录,也就是说,当只授予部分数据库某些权限的时候,user表中相应的权限变为N,而具体的数据库权限写入到db表中。
从上面发现,当用户通过权限认证后进行分配权限时,按照user->db->tables_priv->columns_priv的顺序进行分配,也就是先检查全局权限表user,如果相应的权限为Y,则此用户对所有数据库的权限都为Y,将不再检查db、tables_priv、cloumns_priv表;如果为N,则到db表中检查此用户对应的具体数据库,并得到db表中为Y的权限,如果db表中的权限为N,则检查tables_priv表,取得表中为Y的权限,如果表tables_priv中相应的权限为N,则检查columns_priv中为Y的权限。
发表评论
-
Mysql 乐观锁的实现
2016-10-25 10:28 0上一篇文章《MySQL悲观 ... -
MySQL索引使用
2012-09-20 15:33 1786在MySQL中,下面几种情 ... -
MySQL查询分析器EXPLAIN或DESC
2012-09-20 11:47 6364MySQL可以通过EXP ... -
MySQL LIMIT分页查询优化
2012-09-19 15:04 1991当数据量大的时候一般的分页就吃不消了,先是把COUNT(*)计 ... -
MySQL慢查询分析工具mysqlsla
2012-09-19 14:04 1525一款帮助语句分析、过滤、分析和排序MySQL慢日志 ... -
MySQL 锁表
2012-07-03 20:27 65101.FLUSH TABLES WITH READ LOCK ... -
MySql 账号管理
2012-07-18 22:31 20261、创建账号,有两种方式,一种为使用GRANT,一种直接操作权 ... -
mysqldump 数据导出工具使用
2012-06-13 21:39 2157mysqldump客户端工具用来备份数据库或者在不同数据库之前 ... -
MySQL DDL语句
2012-06-11 20:15 14307DDL语句是定义语言的缩写,是对数据库内部的对象进 ... -
Mysql 修改存储引擎
2012-06-11 17:15 1724修改mysql配置文件my.cnf 在[mysql ... -
MySql优化之:选择优化的数据类型
2012-05-23 08:10 4949MySql支持多种不同的数据类型,选择正确的类型对于获得高性能 ... -
MySQL游标
2012-04-06 10:26 13931Mysql从 5.0 开始支持 ... -
yum 安装 mysql
2012-01-07 18:18 11321、CentOS默认安装的mysql数据库没有mysqld服 ... -
查看MySQL存储引擎
2012-01-07 18:18 10281、SHOW ENGINES; 2、SHOW CREA ... -
mysqld_multi 配置MySQL多实例
2011-11-18 17:39 18188本文讲利用MySQL源码安装MySQL并用mysqld_mul ... -
FLUSH TABLES WITH READ LOCK 和 LOCK TABLES
2011-11-07 08:57 13241.FLUSH TABLES WITH READ L ... -
CHAR和VARCHAR使用原则
2011-10-24 14:12 1700CHAR是固定长度,处理速度要比VARCHAR的要快,但是要浪 ... -
MySQL 浮点型 定点型 长度
2011-10-21 11:40 13793MySQL浮点型和定点型可以用类型名称后加(M,D)来表示,M ... -
MySQL 整型 长度 ZEROFILL属性
2011-10-21 08:04 18011在MySQL中创建整型字段INT(或其它像TINYINT)时, ...
相关推荐
【标题】:“java/mysql 权限管理系统 源码”是指一套基于Java编程语言和MySQL数据库的权限管理软件系统的源代码。这样的系统通常用于管理用户访问控制、角色分配以及资源的权限设定,确保数据安全和操作合规性。 ...
【标题】:“java+mysql权限管理系统”是一种基于Java技术和MySQL数据库,结合了Spring、Struts和Hibernate(简称S2SH)三大框架构建的高效、实用的权限管理解决方案。这个系统设计的目标是为组织或企业提供安全、...
SSH+MySQL权限管理自动建库是企业级应用中常见的需求,尤其在开发高效、安全的管理系统时。SSH指的是Spring、Struts和Hibernate这三个Java技术的组合,它们分别负责了应用的依赖注入、MVC(模型-视图-控制器)框架和...
【JSP+MySQL权限管理系统】是一个基于Java Server Pages(JSP)技术和MySQL数据库构建的权限管理系统。这个系统的核心目标是实现对用户权限的精细化管理,确保不同用户在系统中的操作范围受到适当的限制,以保障系统...
### MySQL权限管理知识点详解 #### 一、MySQL登录与退出 - **登录MySQL**:使用命令`mysql -u [帐号] -p [密码]`来登录MySQL服务。 - **退出MySQL**:在MySQL命令行中输入`exit;`来退出当前会话。 #### 二、MySQL...
报告应清晰展示每个步骤的操作和结果,以证明对MySQL权限管理的理解和掌握。 这个实验不仅帮助学生理解MySQL的权限模型,还能提升他们对数据库安全性的意识,为实际的数据库管理和维护工作打下基础。
spring boot +mybatis+mysql 权限管理系统 包含基础代码 和代码生成器 api接口 token 认证 微信支付接口 支付宝支付 微信开发相关接口 等 csdn 没法上传图片 没法做很多说明 下载看看吧 非常适合快速开发神器
MySQL权限管理(markdown文档教程).mdMySQL权限管理(markdown文档教程).mdMySQL权限管理(markdown文档教程).mdMySQL权限管理(markdown文档教程).md
【标题】"mmall_管理_权限管理mysql_权限_" 指的是一款基于JWT、SpringBoot、Mybatis和MySQL的权限管理系统。这样的系统主要用于控制不同用户或角色在应用程序中的访问权限,确保数据安全和操作合规性。 【描述】...
Spring+SpringMVC+MyBatis+Shiro+MySQL+Redis+Maven+EasyUI+Bootstrap实现的通用权限管理系统。 Spring+SpringMVC+MyBatis+Shiro+MySQL+Redis+Maven+EasyUI+Bootstrap实现的通用权限管理系统 Spring+SpringMVC+...
订单管理模块,数据统计echarts表,该管理系统通过Vue+node.js+Element-UI+MySql实现,其主要功能模块含有用户登陆模块,用户管理模块,权限管理模块,商品管理模块,订单管理模块。 论文应当对各个部分的设计和实现...
基本SSH+maven3+mysql的权限管理。 附件:mysql数据表、数据库model.权限系统war包。系统源码。 还有直接复制过来的项目。要运行需要修改一些地方。大家都会的! 可以自己创建数据库,也可以修改下hibernate配置文件...
一套Struts+Spring+Hibernate基于角色的权限管理系统!~~ LsZamFM"F@ 由于加上JAR文件太大,所以我去除了所有JAR的文件,自己可以添加,如有需要,我可以分批把jar文件上传上来..... h9o`Mg 此源码供大家学习讨论...
MySQL 用户权限管理和授权 MySQL 是一个广泛使用的关系型数据库管理系统,用户权限管理是 MySQL 安全性的关键组件之一。创建 MySQL 用户并赋予某指定库表的权限是 MySQL 安全性配置的重要步骤。本文将详细介绍 ...
### MySQL数据库权限管理详解 在进行数据库开发与维护过程中,权限管理是非常重要的一环。...希望本文能为你提供有关MySQL权限管理方面的深入理解。在未来的工作中,不断优化和完善权限配置,以确保数据的安全与完整。
【MySQL权限管理】 MySQL的权限管理系统是数据库安全的重要组成部分,其目标是确保只有授权的用户才能访问特定的数据。在MySQL中,权限管理涉及到以下几个方面: 1. **权限细化粒度**:MySQL允许管理员以非常细...
一起学习讨论, 0分资源, 随便下
本文将详细介绍 MySQL 的用户登录和权限问题,以 MySQL 5.6 为例,帮助读者深入了解 MySQL 的权限管理机制。 MySQL 用户登录 在 MySQL 中,用户登录是通过用户名和密码来验证身份的。初始情况下,MySQL 的 root ...
MySQL用户账户管理和权限管理是数据库系统中至关重要的环节,确保数据安全和控制不同用户对数据库系统的访问权限。MySQL的权限体系结构精细且层次分明,主要分为五个层级:全局层级、数据库层级、表层级、列层级和子...
MySQL 用户权限管理指南 MySQL 是一个功能强大且广泛使用的关系型数据库管理系统。在 MySQL 中,用户权限管理是非常重要的一方面,合理的权限设置可以确保数据库的安全和稳定运行。本文档将详细介绍 MySQL 用户权限...