MySQL中导出用户权限设置的脚本分享

在对MySQL数据库进行迁移的时候,有时候也需要迁移源数据库内的用户与权限。对于这个迁移我们可以从mysql.user表来获取用户的相关权限来生成相应的SQL语句,然后在目标服务器上来执行生成的SQL语句即可。本文提供了生成提取用户权限的脚本并给出演示。

1、生成用户权限的脚本

代码如下:

[root@HKBO ~]# more exp_grant.sh 
#!/bin/bash 
#Function export user privileges 
 
pwd=123456 
expgrants() 

  mysql -B -u'root' -p${pwd} -N $@ -e "SELECT CONCAT( 
    'SHOW GRANTS FOR ''', user, '''@''', host, ''';' 
    ) AS query FROM mysql.user" | \ 
  mysql -u'root' -p${pwd} $@ | \ 
  sed 's/\(GRANT .*\)/\1;/;s/^\(Grants for .*\)/-- \1 /;/--/{x;p;x;}' 

expgrants > ./grants.sql

2、生成权限SQL脚本

代码如下:

[root@HKBO ~]# ./exp_grant.sh  
 
[root@HKBO ~]# head grants.sql 
-- Grants for root@127.0.0.1  
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY PASSWORD '*EB3EA446C759C9DA93F84FCB56430DBEF051A9DD' WITH GRANT OPTION; 
GRANT ALL PRIVILEGES ON `CNBO0815`.* TO 'root'@'127.0.0.1' WITH GRANT OPTION; 
 
-- Grants for root@172.16.10.%  
GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.10.%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9'; 
 
-- Grants for CNBO@192.168.1.%  
GRANT USAGE ON *.* TO 'CNBO'@'192.168.1.%' IDENTIFIED BY PASSWORD '*ABD91BAD4A3448428563952E281015B237310EA8'; 
         ...........................

3、在目标服务器上执行脚本

将生成的脚本在目标服务器上执行即可。 mysql -uname -ppwd <grants.sql

需要注意:

a、目标服务上为非空服务器,已经存在一些账户及权限应考虑会覆盖的问题。
b、如果仅仅需要迁移非root用户,可以在原脚本中添加过滤条件,即 where user<>'root' 。

(0)

相关推荐

  • MySQL验证用户权限的方法

    知识归纳 因为MySQL是使用User和Host两个字段来确定用户身份的,这样就带来一个问题,就是一个客户端到底属于哪个host. 如果一个客户端同时匹配几个Host,对用户的确定将按照下面的优先级来排 基本观点越精确的匹配越优先 Host列上,越是确定的Host越优先,[localhost, 192.168.1.1, wiki.yfang.cn] 优先于[192.168.%, %.yfang.cn],优先于[192.%, %.cn],优先于[%] User列上,明确的username优先于空u

  • mysql下普通用户备份数据库时无lock tables权限的解决方法

    [root@jb51.net]# mysqldump -u dbuser -ppass db > db.sql mysqldump: Got error: 1044: Access denied for user 'dbuser'@'localhost' to database 'db' when using LOCK TABLES 解决一: 加上-skip-lock-tables选项即可.即: [root@jb51.net]# mysqldump -u dbuser -ppass db --s

  • Windows下降权MYSQL和apche的运行级别(普通用户权限运行)

    1.MYSQL的降权运行 新建立一个用户比如mysql net user mysql microsoft /add net localgroup users mysql /del 不属于任何组 如果MYSQL装在d:\mysql ,那么,给 mysql完全控制 的权限 然后在系统服务中设置,MYSQL的服务属性,在登录属性当中,选择此用户mysql然后输入密码,确定. 重新启动MYSQL服务,然后MYSQL就运行在低权限下了. 2.如果是在windos平台下搭建的apache我们还需要注意一点,

  • 如何用phpmyadmin设置mysql数据库用户的权限

    一.首先您需要在服务器上安装配置 phpMyAdmin 安装配置方法详见: http://www.jb51.net/article/15330.htm 安装好以后,来到 phpMyAdmin 的首页如下图所示: 二.创建用户(如何您之前已经创建好用户,可以省略这一步) 点击上图所示的权限后,可以看到如下图所示: 点击"添加新用户"这个连接,添加一个新的数据库用户名 如下图所示: 三.权限设置 如下图所示: 编辑 hellen 这个用户的权限 如下图所示: 其中增加用户的同时也可以填写用

  • MySQL用户权限管理详解

    用户权限管理主要有以下作用: 1. 可以限制用户访问哪些库.哪些表 2. 可以限制用户对哪些表执行SELECT.CREATE.DELETE.DELETE.ALTER等操作 3. 可以限制用户登录的IP或域名 4. 可以限制用户自己的权限是否可以授权给别的用户 一.用户授权 复制代码 代码如下: mysql> grant all privileges on *.* to 'yangxin'@'%' identified by 'yangxin123456' with grant option;  

  • MySQL创建用户与授权及撤销用户权限方法

    MySQL中创建用户与授权的实现方法. 运行环境:widnows xp professional + MySQL5.0 一, 创建用户 命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明:username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password - 该用户的登陆密码,密码可以为空,

  • mysql SKIP-NAME-RESOLVE 错误的使用时机造成用户权限

    登陆到mysql,查看进程的信息 复制代码 代码如下: show processlist; 发现大量的进程的状态为 login 原来默认的时候mysql启动时是不使用 skip-name-resolve选项的,这样的话,从其它主机的连接会比较慢,因为mysql会对这个ip做dns反向查询,导致大量的连接处于 login状态..... 解决这个问题有两个办法 一是加入 skip-name-resolve参数重启mysql 二是在 /etc/hosts中加入一句 192.168.0.2 server

  • MySQL中基本的用户和权限管理方法小结

    MySQL 默认有个root用户,但是这个用户权限太大,一般只在管理数据库时候才用.如果在项目中要连接 MySQL 数据库,则建议新建一个权限较小的用户来连接. 在 MySQL 命令行模式下输入如下命令可以为 MySQL 创建一个新用户: CREATE USER username IDENTIFIED BY 'password'; 新用户创建完成,但是此刻如果以此用户登陆的话,会报错,因为我们还没有为这个用户分配相应权限,分配权限的命令如下: GRANT ALL PRIVILEGES ON *.

  • mysql 新增、删除用户和权限分配

    1. 新增用户 复制代码 代码如下: mysql>insert into mysql.user(Host,User,Password) values("localhost","lionbule",password("hello1234"));mysql>flush privileges; 2. 修改用户密码 复制代码 代码如下: mysql>update mysql.user set password=password('new

  • mysql数据库添加用户及分配权限具体实现

    创建用户并分配权限: 复制代码 代码如下: insert into mysql.user(Host,User,Password) values("localhost","phplamp",password("1234"));//创建用户 grant all privileges on dbname.* to 'username'@'%' identified by 'password';//创建用户并分配所有权限 grant select,upd

随机推荐