zoukankan      html  css  js  c++  java
  • mysql 开发进阶篇系列 51 权限与安全(权限表user,db详细介绍 )

    一.概述

      mysql 的权限系统主要用来对连接到数据库的用户进行权限验证,以此来判断此用户是否属于合法用户,以及合法用户给予的相应数据库权限。下面将介绍权限系统的工作原理,以及将要熟练掌握账号的管理和使用方法(mysql版本 5.7)。

      1.1  权限系统的工作原理
        mysql 权限系统通过两个阶段进行认证:(1) 对连接的用户进行身份认证,合法的用户通过认证,不合法的用户拒绝连接;(2) 对通过认证的合法用户赋予相应的权限,用户可以在这些权限范围内对数据库做相应操作。

        对于身份认证, mysql是通过ip地址和用户名联合进行确认的, 例如在mysql安装后默认创建的用户root@localhost表示用户root 只能从本地(localhost)进行连接才可以通过认证,此用户从其它任何主机上对数据库进行的连接都将被拒绝。 可以说同样一个用户名,如果来自不同的ip地址,则mysql将视为不同的用户

        如下图所示,mysql.user表中第一行的host列限定是localhost 代表本地:

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

     

    1.2  权限表的权限介绍

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

    表名 user db 描述
    用户列 Host Host 允许用户登录所使用的IP
      User(对应的用户名称) Db(对应的库名称)  
      Password
    (5.7 版本 authentication_string)
    User  
    权限列      
      Select_priv Select_priv 是否通过SELECT命令查询数据
      Insert_priv Insert_priv 是否通过INSERT命令插入数据;  
      Update_priv Update_priv 是否通过UPDATE命令修改现有数据
      Delete_priv Delete_priv 是否通过DELETE命令删除现有数据       
      Create_priv Create_priv 是否可以创建新的数据库和表
      Drop_priv Drop_priv 是否可以删除现有数据库和表
      Reload_priv   是否可以执行刷新和重新加载MySQL所用各种内部缓存的特定命令,包括日志、权限、主机、查询和表;重新加载权限表
      Shutdown_priv   是否可以关闭MySQL服务器
      Process_priv   是否可以通过SHOW PROCESSLIST命令查看其他用户的进程;服务器管理
      File_priv   是否可以执行SELECT INTO OUTFILE和LOAD DATA INFILE命令;加载服务器上的文件
      Grant_priv Grant_priv 是否可以将自己的权限再授予其他用户
      References_priv References_priv 创建外键约束
      Index_priv Index_priv 是否可以创建和删除表索引;用索引查询表
      Alter_priv Alter_priv 是否可以重命名和修改表结构
      Show_db_priv   是否可以查看服务器上所有数据库的名字,包括用户拥有足够访问权限的数据库
      Super_priv   是否可以执行某些强大的管理功能,例如通过KILL命令删除用户进程,使用SET GLOBAL修改全局MySQL变量,执行关于复制和日志的各种命令;超级权限
      Create_tmp_table_priv Create_tmp_table_priv 是否可以创建临时表
      Lock_tables_priv Lock_tables_priv 是否可以使用LOCK TABLES命令阻止对表的访问/修改;
      Execute_priv Execute_priv 是否可以执行存储过程
      Repl_slave_priv   是否可以读取用于维护复制数据库环境的二进制日志文件;此用户位于主系统中,有利于主机和客户机之间的通信;主服务器管理
      Repl_client_priv   是否可以确定复制从服务器和主服务器的位置;从服务器管理
      Create_view_priv Create_view_priv 是否可以创建视图
      Show_view_priv Show_view_priv 是否可以查看视图
      Create_routine_priv Create_routine_priv 是否可以更改或放弃存储过程和函数
      Alter_routine_priv Alter_routine_priv 是否可以修改或删除存储函数及函数
      Create_user_priv   是否可以执行CREATE USER命令,这个命令用于创建新的MySQL账户
      Event_priv Event_priv 是否能否创建、修改和删除事件
      Trigger_priv Trigger_priv 是否能否创建和删除触发器
      Create_tablespace_priv   是否可以创建表空间
    安全列      
      ssl_type   支持ssl标准加密安全字段
      ssl_cipher   支持ssl标准加密安全字段
      x509_issuer   支持x509标准字段
      x509_subject   支持x509标准字段 
    资源控制列      
      max_questions   每小时允许执行多少次查询
      max_updates   每小时可以执行多少次更新
      max_connections   每小时可以建立的多少次连接
      max_user_connections   单用户可以同时具有的连接数
    安全列      
      plugin   引入plugins以进行用户连接时的密码验证,plugin创建外部/代理用户
      password_expired   密码是否过期 (y 已过期)
      password_last_changed    
      password_lifetime    
      account_locked    

        在这二个表中,最重要的是user表,其次是db表,在user表中通常使用最多的是用户列和权限列, 权限列分为普通权限和管理权限。

          普通权限主要用于数据库操作,如seelct_priv,create_priv等。

          管理权限主要用来对数据库进行管理的操作包括:Create_tablespace_priv ,Create_user_priv ,process_priv,

                                Reload_priv, Repl_client_priv , Repl_slave_priv , Show_db_priv ,Shutdown_priv ,super_priv。

        

        最后权限表中权限列,对应的权限名(privilege)如下图所示(在下一章中有用GRANT赋予权限时会用到,例如权限列Delete_priv对应的是DELETE权限):
                详细的权限文档参考:

          https://dev.mysql.com/doc/mysql-security-excerpt/5.7/en/privileges-provided.html#priv_references

  • 相关阅读:
    python__基础 : 类属性,类方法,静态方法
    python__基础 : 类的继承,调用父类的属性和方法
    python__基础 : 类的__init__,__str__,__del__方法
    Python__关于列表的引用 以append操作为例
    HTML5 Canvas 绘制图片不显示的问题
    MySQL 查询排除指定字段、自定义变量、动态执行SQL
    .Net系列 Transaction 事务
    Redis 基本操作
    C# 数值计算、转换
    详解.NET IL代码
  • 原文地址:https://www.cnblogs.com/MrHSR/p/9803629.html
Copyright © 2011-2022 走看看