返回顶部
首页 > 资讯 > 数据库 >MySQL中怎么获取权限信息
  • 539
分享到

MySQL中怎么获取权限信息

2024-04-02 19:04:59 539人浏览 八月长安
摘要

这期内容当中小编将会给大家带来有关Mysql中怎么获取权限信息,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。     最近在做一次mysql数据迁移

这期内容当中小编将会给大家带来有关Mysql中怎么获取权限信息,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

    最近在做一次mysql数据迁移的时候,突然发现自己遗漏了一个地方,那就是权限信息没有导出,如果我们使用mysqldump --all-databases的时候没有添加--flush-privileges的时候,导出的数据中是不会包含mysql数据库的。

   而我其实是比较懒的,不想因为这个重新导出一次,那么我就有几种方式选择。

   如果在MySQL 5.5,5.6的版本中,我可以直接导出mysql.user的数据即可。

   如果使用脚本化完成,基本是这样的形式即可,本意其实就是show grants for 'xxx'的组合形式,不断拼接解析。

mysql -e "SELECT DISTINCT CONCAT('show grants for ','''',user,'''@''',host,'''',';') AS query FROM mysql.user where user!='root'" | grep -v query >/tmp/showgrants.sql && mysql </tmp/showgrants.sql | egrep -v 'Grants for|query'

    运行后的语句大体是如下的形式:

GRANT ALL PRIVILEGES ON *.* TO 'adm'@'localhost' IDENTIFIED BY PASSWord '*3DCFB64FE0CB05D63B9AF64492B5CD6269D82EE8'
GRANT ALL PRIVILEGES ON `Cyou_DAS`.* TO 'adm'@'localhost'
GRANT USAGE ON *.* TO ''@'mysqlactivity'

    这一招在5.5,5.6中都是可行的,但是迁移的数据库是5.7的,看到下面导出的语句,我感觉不对劲,难道都不要密码,如果确实没有,这是一个多么大的坑。

GRANT USAGE ON *.* TO 'PHPlamp'@'localhost'
GRANT ALL PRIVILEGES ON `phplampDB`.* TO 'phplamp'@'localhost'    我知道5.7做了一些改进,本身对于show grants也有一些限制,没想到真碰上这种情况,教训是如此的深刻。

    所以回到问题,如果现在要解决,就有大体的三种方式来同步权限;
方法1:重新导出导入整个数据库    不评论,我绝对不会这么做,只是看起来是一个完整的过程,但是无用功太多,很容易被鄙视
方法2:导出mysql的权限配置    如果是在5.5,5.6的环境,直接导出mysql.user表数据即可,但是在5.7中可不行,一种方式就是导出整个mysql库的数据
方法3:pt工具导出         使用自定义脚本或者pt工具来导出权限信息

当然解决方法很多,我就说说方法2,方法3

我对比了5.6和5.7 的表结构情况。不看不知道,一看差别还真不小。

MySQL 5.7的mysql.user表含有45个字段
MySQL 5.6的mysql.user表含有43个字段

这是表面现象,不是5.7多两个字段这么简单,真实情况如下:

1) MySQL5.7中多了下面的3个字段,字段和数据类型如下:

 password_last_changed  | timestamp            
 password_lifetime      | smallint(5) unsigned
 account_locked         | enum('N','Y') 
2)这么一看总数对不上,这是因为MySQL 5.7相比5.6少了password字段

3)还有个细节可能被忽略,那就是MySQL 5.7的字段user相比MySQL 5.6长度从16字符增长到了32字符。

   这就奇怪了,为什么没有了password字段呢,没有了password字段,这个功能该怎么补充呢

MySQL5.6中查看mysql.user的数据结果如下:

> select user,password,authentication_string from mysql.user;               
| user           | password               | authentication_string |
| app_live_im    | *E96DB97255EF3ED52454A10EDA1AE7BABC8D3700 |    |
| mysqlmon       | *0571D080430BC7B60A3F4D41A8D71501E6B8FDAA |    | 而在MySQL 5.7中,结果却有所不同

+-----------------+-------------------------------------------+
| user            | authentication_string                     |
+-----------------+-------------------------------------------+
| gym             | *0CD6502815166F2C7E17B630C3248B900065FCEA |
| actv_test       | *82A4DC7B3F5E73E822529E9EF4DE8C042253445A |一个重要差别就在于mysql.user表的字段值 plugin

 max_connections: 0
  max_user_connections: 0
                plugin: mysql_native_password
 authentication_string:
      password_expired: N
 password_last_changed: 2016-11-09 11:38:39
     password_lifetime: 0

 基于这个安全策略,可以做很多的事情,5.7默认就是这种模式。

   看起来之前的那种show grants得到的信息很有限,那么我们来看看pt工具的效果,直接运行./pt-show-grants即可

-- Grants for 'WEBadmin'@'10.127.8.207'                             
CREATE USER IF NOT EXISTS 'webadmin'@'10.127.8.207';  
ALTER USER 'webadmin'@'10.127.8.207' IDENTIFIED WITH 'mysql_native_password' AS '*DA43F144DD67A3F00F086B0DA1288C1D5DA7251F' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK;
GRANT ALL PRIVILEGES ON *.* TO 'webadmin'@'10.127.xx.xx';            

 这样的语句相对来说就是完整的,使用show grants的结果少了很多,只包含基本的权限信息。        

> show grants for 'webadmin'@'10.12.20.133';
| GRANT ALL PRIVILEGES ON *.* TO 'webadmin'@'10.12.xx.xxx' |   为什么使用pt工具能够得到更多,不是这个工具有多神奇,而是里面充分利用了新特性的东西。

pt-show-grants里面是这样写的,对于MySQL 5.7的处理方式。

      # If MySQL 5.7.6+ then we need to use SHOW CREATE USER
      my @create_user;
      if ( VersionCompare::cmp($version, '5.7.6') >= 0 ) {
         eval {
            @create_user = @{ $dbh->selectcol_arrayref("SHOW CREATE USER $user_host") };
         };
         if ( $EVAL_ERROR ) {
            PTDEBUG && _d($EVAL_ERROR);
            $exit_status = 1;
         }
         PTDEBUG && _d('CreateUser:', Dumper(\@create_user));
         # make this replication safe converting the CREATE USER into
         # CREATE USER IF NOT EXISTS and then doing an ALTER USER
            my $create = $create_user[0];
            my $alter  = $create;
            $create =~ s{CREATE USER}{CREATE USER IF NOT EXISTS};
            $create =~ s{ IDENTIFIED .*}{};
            $alter  =~ s{CREATE USER}{ALTER USER};
            @create_user = ( $create, $alter );
            PTDEBUG && _d('AdjustedCreateUser:', Dumper(\@create_user));
      }

简化一下就是使用show create user这种方式,在这个基础上额外补充一下,使得这个语句更加健壮。

我们使用show create user 'webadmin'@'10.12.20.133'得到的结果如下:

| CREATE USER 'webadmin'@'10.12.20.133' IDENTIFIED WITH 'mysql_native_password' AS '*DA43F144DD67A3F00F086B0DA1288C1D5DA7251F' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK |

语句看起来丰满了很多,但是似乎还是少了些权限的信息,

这是因为5.7里面完整的信息是通过show create user和show grants for 'xx'这两种方式完成的,而在5.6中只需要通过show grants for 'xxx’即可。

上述就是小编为大家分享的MySQL中怎么获取权限信息了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中怎么获取权限信息

本文链接: https://lsjlt.com/news/56893.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL中怎么获取权限信息
    这期内容当中小编将会给大家带来有关MySQL中怎么获取权限信息,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。     最近在做一次MySQL数据迁移...
    99+
    2024-04-02
  • android微信授权怎么获取用户个人信息
    本篇内容主要讲解“android微信授权怎么获取用户个人信息”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“android微信授权怎么获取用户个人信息”吧!微信官方文档API:https://de...
    99+
    2023-06-22
  • C++中怎么获取CPU信息
    C++中怎么获取CPU信息,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。C++获取CPU信息之获得CPU的制造商信息(Vender ID String)把eax...
    99+
    2023-06-17
  • win7怎么获取trustedinstaller权限
    本篇内容介绍了“win7怎么获取trustedinstaller权限”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!获取方法:选择一系统文件-...
    99+
    2023-06-28
  • Linux怎么获取root权限
    这篇文章跟大家分析一下“Linux怎么获取root权限”。内容详细易懂,对“Linux怎么获取root权限”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“Linux怎么获取root...
    99+
    2023-06-28
  • win10怎么获取trustedinstaller权限
    要获取TrustedInstaller权限,您可以按照以下步骤操作: 打开Windows资源管理器,并导航到您想要获取权限的文件或...
    99+
    2023-10-20
    win10
  • python获取mysql表信息
    使用python获取mysql相关信息,使用python执行mysql相关语句test1 #!/bin/env python #coding=utf-8 #by songry #date 2018-01-09 #time 11:18 #po...
    99+
    2023-01-31
    信息 python mysql
  • python中怎么获取对象信息
    本篇文章给大家分享的是有关python中怎么获取对象信息,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、获取对象类型,基本类型可以用type()来判断。>>>...
    99+
    2023-06-20
  • VB.NET中怎么获取硬盘信息
    VB.NET中怎么获取硬盘信息,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。VB.NET获取硬盘信息1、用API函数GetDiskFreeSpaceEx获取磁盘空间Privat...
    99+
    2023-06-17
  • python怎么获取excel中的信息
    python中怎么获取excel中的数据 一.安装第三方库 pip install openpyxl 二、excel组成和python里面对象对应起来 组成:多个单元格组成一个表格,多个表单组成exc...
    99+
    2023-10-02
    python excel 开发语言
  • win7 system权限怎么获取?win7管理员权限获取方法介绍
      win7 system权限怎么获取有时我们需要删除一些东西,需要system权限,但是SYSTEM是至高无上的超级管理员帐户,该如何获得呢下文小编将告诉大家win7管理员权限获取方法,有需要的朋友可以过来了解一下。软...
    99+
    2023-06-06
    win7 system权限怎么获取 win7管理员权限获取 获取 管理员 权限 system 方法
  • mysql 获取字段json 信息
    可以使用MySQL的内置函数 JSON_EXTRACT() 来获取JSON字段的信息。以下是使用该函数的示例: 假设您有以下的表格 users : id | name | info--------...
    99+
    2023-10-06
    mysql json java
  • MySQL explain怎么获取查询指令信息
    这篇文章主要为大家展示了MySQL explain怎么获取查询指令信息,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。explain用于获取查询执行计划信息,一...
    99+
    2024-04-02
  • javascript中怎么利用ajax获取信息
    这篇文章给大家介绍javascript中怎么利用ajax获取信息,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 Client端代码如下: <html...
    99+
    2024-04-02
  • PHP中怎么获取服务器信息
    要获取服务器信息,可以使用以下几种方法: 使用$_SERVER全局变量来获取服务器信息,例如: echo $_SERVER[&#...
    99+
    2024-04-29
    PHP 服务器
  • Win7怎么获取管理员权限
    这篇文章主要介绍“Win7怎么获取管理员权限”,在日常操作中,相信很多人在Win7怎么获取管理员权限问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Win7怎么获取管理员权限”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-27
  • win10系统怎么获取trustedinstaller权限
    要获取TrustedInstaller权限,您可以按照以下步骤操作:1. 在键盘上按下Win + X键,并选择“Windows Po...
    99+
    2023-08-21
    Win10
  • win7管理员权限怎么获取
    win7管理员权限怎么获取对很多使用win7的用户来说很重要,由于只要有了管理员的权限就你可以随意访问win7的文件,下面就是win7管理员权限怎么获取方式介绍,最先客户必须进到打开运行进到组策略操作面板,在这儿就能够分配用户的权限,这样就...
    99+
    2023-07-10
  • ansible怎么获取主机信息
    要获取主机的信息,可以使用Ansible的setup模块。setup模块可以收集主机的各种信息,并将其保存为Ansible的fact...
    99+
    2023-10-24
    ansible
  • HTML5中怎么获取地理位置信息
    HTML5中怎么获取地理位置信息,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。如何使用HTML5地理位置定位功能定位功能(Geolocatio...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作