`
chenzehe
  • 浏览: 538215 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MySql 权限管理

 
阅读更多

      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的权限。

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    java/mysql 权限管理系统 源码

    【标题】:“java/mysql 权限管理系统 源码”是指一套基于Java编程语言和MySQL数据库的权限管理软件系统的源代码。这样的系统通常用于管理用户访问控制、角色分配以及资源的权限设定,确保数据安全和操作合规性。 ...

    java+mysql权限管理系统

    【标题】:“java+mysql权限管理系统”是一种基于Java技术和MySQL数据库,结合了Spring、Struts和Hibernate(简称S2SH)三大框架构建的高效、实用的权限管理解决方案。这个系统设计的目标是为组织或企业提供安全、...

    ssh+mysql权限管理自动建库

    SSH+MySQL权限管理自动建库是企业级应用中常见的需求,尤其在开发高效、安全的管理系统时。SSH指的是Spring、Struts和Hibernate这三个Java技术的组合,它们分别负责了应用的依赖注入、MVC(模型-视图-控制器)框架和...

    JSP+mysql权限管理系统

    【JSP+MySQL权限管理系统】是一个基于Java Server Pages(JSP)技术和MySQL数据库构建的权限管理系统。这个系统的核心目标是实现对用户权限的精细化管理,确保不同用户在系统中的操作范围受到适当的限制,以保障系统...

    第13章MySQL权限管理.docx

    ### MySQL权限管理知识点详解 #### 一、MySQL登录与退出 - **登录MySQL**:使用命令`mysql -u [帐号] -p [密码]`来登录MySQL服务。 - **退出MySQL**:在MySQL命令行中输入`exit;`来退出当前会话。 #### 二、MySQL...

    实验十一mysql权限管理可用.pdf

    报告应清晰展示每个步骤的操作和结果,以证明对MySQL权限管理的理解和掌握。 这个实验不仅帮助学生理解MySQL的权限模型,还能提升他们对数据库安全性的意识,为实际的数据库管理和维护工作打下基础。

    spring boot +mybatis+mysql 权限管理系统 包含基础代码 和代码生成器 api接口 token 认证 微信支付接口 支付宝支付

    spring boot +mybatis+mysql 权限管理系统 包含基础代码 和代码生成器 api接口 token 认证 微信支付接口 支付宝支付 微信开发相关接口 等 csdn 没法上传图片 没法做很多说明 下载看看吧 非常适合快速开发神器

    MySQL权限管理(markdown文档教程).md

    MySQL权限管理(markdown文档教程).mdMySQL权限管理(markdown文档教程).mdMySQL权限管理(markdown文档教程).mdMySQL权限管理(markdown文档教程).md

    mmall_管理_权限管理mysql_权限_

    【标题】"mmall_管理_权限管理mysql_权限_" 指的是一款基于JWT、SpringBoot、Mybatis和MySQL的权限管理系统。这样的系统主要用于控制不同用户或角色在应用程序中的访问权限,确保数据安全和操作合规性。 【描述】...

    Spring+SpringMVC+MyBatis+Shiro+MySQL+Redis+Maven实现的通用权限管理系统

    Spring+SpringMVC+MyBatis+Shiro+MySQL+Redis+Maven+EasyUI+Bootstrap实现的通用权限管理系统。 Spring+SpringMVC+MyBatis+Shiro+MySQL+Redis+Maven+EasyUI+Bootstrap实现的通用权限管理系统 Spring+SpringMVC+...

    通过Vue+node.js+Element-UI+MySql实现超市管理系统.rar

    订单管理模块,数据统计echarts表,该管理系统通过Vue+node.js+Element-UI+MySql实现,其主要功能模块含有用户登陆模块,用户管理模块,权限管理模块,商品管理模块,订单管理模块。 论文应当对各个部分的设计和实现...

    SSH+maven+mysql权限管理

    基本SSH+maven3+mysql的权限管理。 附件:mysql数据表、数据库model.权限系统war包。系统源码。 还有直接复制过来的项目。要运行需要修改一些地方。大家都会的! 可以自己创建数据库,也可以修改下hibernate配置文件...

    mysql权限管理系统

    一套Struts+Spring+Hibernate基于角色的权限管理系统!~~ LsZamFM"F@ 由于加上JAR文件太大,所以我去除了所有JAR的文件,自己可以添加,如有需要,我可以分批把jar文件上传上来..... h9o`Mg 此源码供大家学习讨论...

    创建MySQL用户赋予某指定库表的权限[文].pdf

    MySQL 用户权限管理和授权 MySQL 是一个广泛使用的关系型数据库管理系统,用户权限管理是 MySQL 安全性的关键组件之一。创建 MySQL 用户并赋予某指定库表的权限是 MySQL 安全性配置的重要步骤。本文将详细介绍 ...

    访问Mysql数据库的权限.txt

    ### MySQL数据库权限管理详解 在进行数据库开发与维护过程中,权限管理是非常重要的一环。...希望本文能为你提供有关MySQL权限管理方面的深入理解。在未来的工作中,不断优化和完善权限配置,以确保数据的安全与完整。

    Mysql与MongoDB的权限管理与申请_20180818_张煜杰1

    【MySQL权限管理】 MySQL的权限管理系统是数据库安全的重要组成部分,其目标是确保只有授权的用户才能访问特定的数据。在MySQL中,权限管理涉及到以下几个方面: 1. **权限细化粒度**:MySQL允许管理员以非常细...

    MySQL权限管理(教程).md

    一起学习讨论, 0分资源, 随便下

    mysql基础补充2-用户登录和权限问题

    本文将详细介绍 MySQL 的用户登录和权限问题,以 MySQL 5.6 为例,帮助读者深入了解 MySQL 的权限管理机制。 MySQL 用户登录 在 MySQL 中,用户登录是通过用户名和密码来验证身份的。初始情况下,MySQL 的 root ...

    MySQL用户账户管理和权限管理深入讲解

    MySQL用户账户管理和权限管理是数据库系统中至关重要的环节,确保数据安全和控制不同用户对数据库系统的访问权限。MySQL的权限体系结构精细且层次分明,主要分为五个层级:全局层级、数据库层级、表层级、列层级和子...

    创建MySQL用户 赋予某指定库表的权限.docx

    MySQL 用户权限管理指南 MySQL 是一个功能强大且广泛使用的关系型数据库管理系统。在 MySQL 中,用户权限管理是非常重要的一方面,合理的权限设置可以确保数据库的安全和稳定运行。本文档将详细介绍 MySQL 用户权限...

Global site tag (gtag.js) - Google Analytics