MySQL中導出用戶權限設置的腳本


    在對MySQL數據庫進行遷移的時候,有時候也需要遷移源數據庫內的用戶與權限。對於這個遷移我們可以從mysql.user表來獲取用戶的相關權限來生成相應的SQL語句,然后在目標服務器上來執行生成的SQL語句即可。本文提供了兩個生成提取用戶權限的腳本並給出演示。

    說明:mysql中直接通過授權即可使用對應用戶,不必使用創建用戶命令(如CREATE USER 'xxx'@'%' IDENTIFIED BY 'XXX';)先建用戶再授權。

方法一:該腳本可以將所有授權數據到當前目錄下的sql腳本(grants.sql)中,使用grants.sql腳本刷到數據庫中即可完成授權數據遷移(注意:這里導出的數據包含root用戶的授權關系,而且導入之后會把目前已有的數據覆蓋掉,請確認需要覆蓋再進行導入!!)

#!/bin/bash  
#Function export user privileges  

pwd=root123
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
注意:上述代碼中,需要根據實際情況(mysql的root用戶的密碼)替換pwd的值。將上述代碼拷貝后,新建並貼到shell腳本(如exp_grants.sh)中執行該腳本即可完成數據庫用戶授權導出。

方法二:該腳本可以將所有授權數據到當前目錄下的sql腳本(create-users.sql)中,使用create-users.sql腳本刷到數據庫中即可完成授權數據遷移(注意:這里導出的數據包含root用戶的授權關系,而且導入之后會把目前已有的數據覆蓋掉,請確認需要覆蓋再進行導入!!)

#!/bin/bash  
#Function export user privileges  
hostname=localhost
username=root
password=root123
port=3306
echo "select concat('show grants for ''',user,'''@''',host, ''';') from mysql.user " | \
mysql --host=$hostname --user=$username --password=$password --port=$port -N | \
mysql --host=$hostname --user=$username --password=$password --port=$port -N | \
sed "s/$/;/" > create-users.sql
注意:上述代碼中,需要根據實際情況替換hostname、username、password、port的值。將上述代碼拷貝后,新建並貼到shell腳本(如exp_grants.sh)中執行該腳本即可完成數據庫用戶授權導出。


以上兩個文件導出后的腳本(grants.sql及create-users.sql)中內容類似如下片段:

-- Grants for root@% 
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD '*FAAFFE644E901CFAFAEC7562415E5FAEC243B8B2' WITH GRANT OPTION;

-- Grants for skyleo@% 
GRANT ALL PRIVILEGES ON *.* TO 'aaa'@'%' IDENTIFIED BY PASSWORD '*E6A7BF712C9294EEF165FC1CD0AD04FABC5E1136' WITH GRANT OPTION;

-- Grants for skyleo1@% 
GRANT ALL PRIVILEGES ON *.* TO 'aaa1'@'%' IDENTIFIED BY PASSWORD '*1E9DC9809EBE1D5089616868F2DE14B375DACF64' WITH GRANT OPTION;

-- Grants for skyleo2@% 
GRANT ALL PRIVILEGES ON *.* TO 'aaa2'@'%' IDENTIFIED BY PASSWORD '*A601FAAA6AB2D539501BA7FE6E816D499207BA76' WITH GRANT OPTION;



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM