zoukankan      html  css  js  c++  java
  • 003:MySQL账号创建授权以及Workbench

    一. 权限管理

    1.“用户 + IP”的概念

    MySQL中同一个用户名,比如db,能否登录,以及用什么密码登录,可以访问什么库等等,都需要加上IP,才可以表示一个完整的用户标识

    db@127.0.0.1db@loalhost 以及 db@192.168.1.100 这三个其实是不同用户标识 ,即不同的用户名

    2. 用户权限管理

    • 系统表权限信息:

      • a) 用户名和IP是否允许
      • b) 查看mysql.user表 // 查看全局所有库的权限
      • c) 查看mysql.db表 // 查看指定库的权限
      • d) 查看mysql.table_priv表 // 查看指定表的权限
      • e) 查看mysql.column_priv表 // 查看指定列的权限
    • 常用权限:

      • SQL语句:SELECT、INSERT、UPDATE、DELETE、INDEX
      • 存储过程:CREATE ROUTINE、ALTER ROUTINE、EXECUTE、TRIGGER
      • 管理权限:SUPER、RELOAD、SHOW DATABASE、SHUTDOWN、

      所有权限

    • 可选资源:

      • MAX_QUERIES_PER_HOUR count
      • MAX_UPDATES_PER_HOUR count
      • MAX_CONNECTIONS_PER_HOUR count
      • MAX_USER_CONNECTIONS count

      tips:只能精确到小时,对于部分场景不适用,可以考虑中间件方式

    • 显示当前用户的权限

    #这三个是同一个意思
    mysql> show grants;
    mysql> show grants for current_user;
    mysql> show grants for current_user();
    

    3. 基本操作

    mysql> create user 'db'@'127.0.0.1' identified by '123'; 
           #创建一个认证用户为'db'@'127.0.0.1',密码是123
           
    mysql> grant all on sysbench.* to 'sbb'@'127.0.0.1';
           #授予他sysbench库下面所有表的所有访问权限; *.*表示所有库的所有表
    
    mysql> grant all on sysbench.* to 'alex'@'127.0.0.1' identified by '123456';
           #这个grant语句会搜索用户,如果用户不存在,则自动创建用户,
           #如果不带identified by, 则该用户名密码为空
    
    mysql> grant all on *.* to 'gcdb'@'192.168.24.%' identified by 'iforgot' with grant option;
           #表示这个用户'gcdb'@'127.0.0.1'可以访问所有库的所有表,
           #同时,他还可以给其他用户授予权限(with grant option),
           #注意如果,*.*改成了某一个指定的非USER库,
           #则gcdb没法去新建其他用户了,因为User库没有权限了
           #192.168.24.% 表示属于192.168.24.0/24网段的用户可以访问
    

    4. 撤销权限

    • revoke 关键字,该关键字只删除用户权限,不删除用户
    • revoke 语法同grant一致, 从grant ... to 变为revoke ... from

    5.授权和创建用户

    • GRANT与创建用户
    mysql> grant select on sysbench.* to 'fanghao'@'localhost' identified by 'haoshijiwudi';
    Query OK, 0 rows affected, 2 warnings (0.00 sec)
    -- 这里有2个warning
    mysql> show warnings; 
    --输入warning的Message如下: 
    | Warning | 1285 | MySQL is started in --skip-name-resolve mode; you must restart it without this switch for this grant to work                       |
    | Warning | 1287 | Using GRANT for creating new user is deprecated and will be removed in future release.Create new user with CREATE USER statement. |
    --第一条的意思,跳过域名解析模式,暂时不管
    --第二条的意思是使用GRANT赋权限的同时创建'fanghao'@'localhost'这个用户,但是出现了warning,从给出的提示看来,以后的MySQL版本会废弃掉这种方式
    
    --正确的创建用户并赋权的方式: 
    mysql> drop user 'fanghao'@'localhost';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> create user 'fanghao'@'localhost' identified by 'haoshijiwudi';
    Query OK, 0 rows affected (0.00 sec)
    
    • 查看某一个用户的权限
    mysql> show grants for 'fanghao'@'localhost';
    +-------------------------------------------------------+
    | Grants for fanghao@localhost                          |
    +-------------------------------------------------------+
    | GRANT USAGE ON *.* TO 'fanghao'@'localhost'           |  --USAGE表示用户可以登录
    | GRANT SELECT ON `sysbench`.* TO 'fanghao'@'localhost' |  --对sysbench库的所有表有select权限
    +-------------------------------------------------------+
    2 rows in set (0.00 sec)
    
    • 删除某一个用户
    mysql> drop user 'fanghao'@'localhost';
    Query OK, 0 rows affected (0.00 sec)
    
    • MySQL权限信息
    mysql> select * from mysql.user where user='fanghao' G;
    *************************** 1. row ***************************
                      Host: localhost
                      User: fanghao       ---由于fanghao用户是对sysbench库有权限,所以这里(USER)全是N 
               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
    Create_tablespace_priv: N
                  ssl_type:
                ssl_cipher:
               x509_issuer:
              x509_subject:
             max_questions: 0
               max_updates: 0
           max_connections: 0
      max_user_connections: 0
                    plugin: mysql_native_password
     authentication_string: *1A7B1D37BD4148AD15497C3803F812C91047EC4F
          password_expired: N
     password_last_changed: 2017-11-22 16:31:57
         password_lifetime: NULL
        account_locked: N     -- 如果这里为Y表示被锁定,该用户就无法使用了
    1 row in set (0.01 sec)
    
    
    mysql> select * from mysql.db where user='fanghao' G;
    *************************** 1. row ***************************
                     Host: localhost    --授权主机
                       Db: sysbench     --sysbench数据库
                     User: fanghao      --用户名
              Select_priv: Y            --授权的select权限
              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            --注意: 不建议使用INSERT或者GRANT对元数据表进行修改,来达到修改权限的目的
    1 row in set (0.01 sec)
    
    --使用fanghao账号登陆    
    mysql> select user();
    +-------------------+
    | user()            |
    +-------------------+
    | fanghao@localhost |
    +-------------------+
    1 row in set (0.00 sec)
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |               -- 这是一个统计信息的数据库,use可以进去,部分表没有权限查询
    | sysbench           |
    +--------------------+
    2 rows in set (0.00 sec)
    
    mysql> select * from views;
    Empty set (0.00 sec)
    
    mysql> select * from innodb_cmp;
    ERROR 1227 (42000): Access denied; you need (at least one of) the PROCESS privilege(s) for this operation
    

    二. MySQL模拟角色

    • 角色的定义:

      • 角色(Role)可以用来批量管理用户,同一个角色下的用户,拥有相同的权限。 MySQL5.7.X以后可以模拟角色(Role)的功能,通过mysql.proxies_priv模拟实现。
      • mysql.proxies_priv在5.5.X和5.6.X的时候就存在,但是无法模拟角色(Role)功能。
    • 模拟角色操作:

    mysql> create user 'shiji_dba'@'localhost'; -- 相当于定于一个老司机角色(Role), -- 但这只是个普通的用户,名字比较有(Role)的感觉 -- 有点类似用户组
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> create user 'bangwen'@‘localhost’;   --测试用户(邦文袍哥)
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> create user 'xuge'@'localhost';      --测试用户(许哥小司机)
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> grant proxy on 'shiji_dba'@'localhost' to 'bangwen'@‘localhost’;  -- 将shiji_dba的权限映射(map)给bangwen
    Query OK, 0 rows affected, 2 warnings (0.00 sec)
    
    mysql> grant proxy on 'shiji_dba'@'localhost' to 'xuge'@‘localhost’;     -- 将shiji_dba的权限映射(map)给xuge
    Query OK, 0 rows affected, 3 warnings (0.00 sec)
    
    mysql> show grants for 'shiji_dba'@'localhost';                         -- 查看shiji_dba角色赋予的实际权限
    +---------------------------------------------------------+
    | Grants for shiji_dba@localhost                          |
    +---------------------------------------------------------+
    | GRANT USAGE ON *.* TO 'shiji_dba'@'localhost'           |
    | GRANT SELECT ON `sysbench`.* TO 'shiji_dba'@'localhost' |
    +---------------------------------------------------------+
    
    mysql> show grants for 'bangwen'@‘localhost’;                            -- 查看bangwen老司机的权限
    +-----------------------------------------------------------------------+
    | Grants for bangwen@‘localhost’                                        |
    +-----------------------------------------------------------------------+
    | GRANT USAGE ON *.* TO 'bangwen'@'‘localhost’'                         |
    | GRANT PROXY ON 'shiji_dba'@'localhost' TO 'bangwen'@'‘localhost’'     |
    +-----------------------------------------------------------------------+
    2 rows in set (0.00 sec)
    
    mysql> select * from mysql.proxies_priv;                                 -- 查看 proxies_priv的权限
    +-----------------+---------+--------------+--------------+------------+----------------------+---------------------+
    | Host            | User    | Proxied_host | Proxied_user | With_grant | Grantor              | Timestamp          |
    +-----------------+---------+--------------+--------------+------------+----------------------+---------------------+
    | localhost       | root    |              |              |          1 | boot@connecting host | 0000-00-00 00:00:00 |
    | ‘localhost’     | bangwen | localhost    | shiji_dba    |          0 | root@localhost       | 0000-00-00 00:00:00 |
    | ‘localhost’     | xuge    | localhost    | shiji_dba    |          0 | root@localhost       | 0000-00-00 00:00:00 |
    +-----------------+---------+--------------+--------------+------------+----------------------+---------------------+
    3 rows in set (0.00 sec)
    --总结mysql.proxies_priv仅仅是对Role的模拟,和Oracle的角色还是有所不同.官方称呼为Role like
    

    三. Workbench与Utilities介绍

    • 下载

    • Workbench功能概述

      • SQL语句格式化 SQL关键字upcase MySQL Dashboard SQL语法提示 ER图 Forward Engine //ER图 --> DB表结构 Reverse //DB表结构 --> ER图
    • Utilities介绍和安装

      • MySQL Utilities介绍
        • MySQL Utilities 提供一组命令行工具用于维护和管理 MySQL 服务器,包括:
          • 管理工具 (克隆、复制、比较、差异、导出、导入)
          • 复制工具 (安装、配置)
          • 一般工具 (磁盘使用情况、冗余索引、搜索元数据)

    MySQL Utilities是一系列的命令行工具以及Python库更容易完成管理的任务。库是用Python语言写的,这就意味着不需要安装其他任何工具和库。当前是基于Python2.6版本设计的,不支持Python3.1版本.

    MySQL Utilities提供了各种平台的软件包,如果没有找到对应自己平台的包,可以通过源码进行编译安装。

    最新的MySQL Utilities可以在此处下载:(http://dev.mysql.com/downloads/utilities/)

    • MySQL Utilities依赖环境

    MySQL Utilities需要Python2.6版本,所有的代码都是基于该版本编写的。同时,还需要连接驱动MySQL Connector/Python通用版本(高于1.0.8)。

    MySQL Connector/Python下载地址:http://dev.mysql.com/downloads/connector/python/

    • MySQL Utilities源码安装
    shell> wget -c https://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-utilities-1.6.5.tar.gz
    shell> tar zxvf mysql-utilities-1.6.5.tar.gz
    shell> cd mysql-utilities-1.6.5
    shell>  python ./setup.py build
    shell>  python ./setup.py install
    
  • 相关阅读:
    python学习第十一天 -- 函数式编程
    python学习第十天 -- 函数
    python学习第九天 -- 列表生产式
    python学习第八天 -- 迭代
    (转载)C# 编程 使用可空类型
    Func的介绍——c#封装的代理
    select SCOPE_IDENTITY()用法
    insert into 语句的三种写法
    面试感悟----一名3年工作经验的程序员应该具备的技能
    SQL中常用模糊查询的四种匹配模式&&正则表达式
  • 原文地址:https://www.cnblogs.com/gczheng/p/7880360.html
Copyright © 2011-2022 走看看