DRS要求的My SQL權限有哪些
DRS在遷移過程中,對帳號有一定的權限要求,本章節主要介紹MySQL引擎的權限要求。
權限要求
源和目標庫的連接賬號需要具有登錄權限,如果沒有該賬號,可以通過如下方式創建,以user1為例。
參考語句:CREATE USER 'user1'@'host' IDENTIFIED BY 'password';
DRS的實時遷移功能的權限要求,表6-1中以user1為例提供參考語句。
權限要求及參考語句
| 功能模塊 | 源/業務數據庫 | 目標/災備數據庫 |
|---|---|---|
| 實時遷移 | 全量遷移權限要求:SELECT、SHOW VIEW、EVENT。參考語句:GRANTSELECT, SHOW VIEW, EVENTON . TO'user1';全量+增量遷移權限要求:SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、INDEX、EVENT、CREATE VIEW、CREATE ROUTINE、TRIGGER、REFERENCES、WITH GRANT OPTION。當目標庫為8.0.14-8.0.18版本時,還需要有SESSION_VARIABLES_ADMIN權限。l 其中,REPLICATION SLAVE、REPLICATION CLIENT是全局權限,必須單獨開啟。參考語句如下:GRANTREPLICATION SLAVE, REPLICATION CLIENTON . TO'user1';l SELECT、SHOW VIEW、EVENT、LOCK TABLES是非全局權限,參考語句如下:GRANTSELECT, SHOW VIEW, EVENT, LOCK TABLESON[待遷移數據庫].*TO'user1'; | 全量遷移權限要求:SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。參考語句:GRANTSELECT, CREATE, ALTER, DROP, DELETE, INSERT, UPDATE, INDEX, EVENT, CREATE VIEW, CREATE ROUTINE, TRIGGERON . TO'user1'WITH GRANT OPTION;全量+增量遷移權限要求:SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、INDEX、EVENT、CREATE VIEW、CREATE ROUTINE、TRIGGER、REFERENCES、WITH GRANT OPTION。當目標庫為8.0.14-8.0.18版本時,還需要有SESSION_VARIABLES_ADMIN權限。參考語句:GRANTSELECT, CREATE, ALTER, DROP, DELETE, INSERT, UPDATE, INDEX, EVENT, CREATE VIEW, CREATE ROUTINE, TRIGGER, REFERENCESON[待遷移數據庫].*TO'user1'WITH GRANT OPTION; |
請在以上參考語句后執行 flush privileges; 使授權生效。
用戶遷移權限要求
用戶遷移時帳戶需要有mysql.user的SELECT權限。
參考語句:
GRANT SELECT ON mysql.user TO 'user1'@' host ' ;
GRANT SELECT ON mysql.user_view TO 'user1';
目標數據庫賬號需要有所有庫的SELECT,INSERT,UPDATE,DELETE, WITH GRANT OPTION權限。
參考語句:GRANT SELECT, INSERT, UPDATE, DELETE ON . TO 'user1' WITH GRANT OPTION ;
授權操作說明
創建用戶
操作方式:
CREATE USER ' username '@' host ' IDENTIFIED BY ' password ';
· username:待創建的賬號。
· host:允許該賬號登錄的主機,如果允許該賬號從任意主機登錄數據庫,可以使用%。
· password:賬號的密碼。
授予相應權限
操作方式:
GRANT privileges **ON **databasename.tablename TO ' username '@' host ' WITH GRANT OPTION ;
flush privileges;
· privileges:授予該賬號的操作權限,如SELECT、INSERT、UPDATE等,如果要授予該賬號所有權限,則使用ALL
· databasename:數據庫名。如果要授予該賬號具備所有數據庫的操作權限,則使用*。
· tablename:表名。如果要授予該賬號具備所有表的操作權限,則使用*。
· username:待授權的賬號。
· host:允許該賬號登錄的主機,如果允許該賬號從任意主機登錄,則使用%。
· WITH GRANT OPTION:授予該賬號使用GRANT命令的權限,該參數為可選。
如何將源數據庫的用戶與權限導出,再導入到目標數據庫
步驟 1 選擇一臺可以訪問源數據庫的虛擬機。
步驟 2 執行如下命令后,輸入密碼并回車,將源庫用戶導出到臨時文件“users.sql”中。
mysql -h 'host' -u 'user' -p **** -N $@ -e "SELECT CONCAT('SHOW GRANTS FOR ''', user, '''@''', host, ''';') AS query FROM mysql.user" > /tmp/users.sql
其中的 'host' 替換為源數據庫的訪問IP地址,*'user'** ***替換為源數據庫的用戶名。
步驟 3 執行如下命令,將源數據庫中原有用戶的授權信息導出到文件“grants.sql”中**。**
mysql -h 'host' -u 'user' -p -N $@ -e ** "** source /tmp/users.sql" > /tmp/grants.sql
sed -i 's/$/;/g' /tmp/grants.sql
其中的 'host' 替換為源數據庫的訪問IP地址,*'user'** ***替換為源數據庫的用戶名。
步驟 4 命令運行成功后,打開“grants.sql”文件可以看到類似以下的結果。
-- Grants for root@%** **
GRANT ALL PRIVILEGES ON . TO 'root'@'%';** **
-- Grants for testt@%** **
GRANT SELECT, INSERT, UPDATE, DELETE ON . TO 'testt'@'%';** **
-- Grants for debian-sys-maint@localhost
GRANT ALL PRIVILEGES ON . TO 'debian-sys-maint'@'localhost' WITH GRANT OPTION;** **
-- Grants for mysql.session@localhost** **
GRANT SUPER ON . TO 'mysql.session'@'localhost';
GRANT SELECT ON performance_schema.* TO 'mysql.session'@'localhost';** **
GRANT SELECT ON mysql.user TO 'mysql.session'@'localhost';** **
-- Grants for mysql.sys@localhost** **
GRANT USAGE ON . TO 'mysql.sys'@'localhost';
GRANT TRIGGER ON sys.* TO 'mysql.sys'@'localhost';
GRANT SELECT ON sys.sys_config TO 'mysql.sys'@'localhost';** **
-- Grants for root@localhost** **
GRANT ALL PRIVILEGES ON . TO 'root'@'localhost' WITH GRANT OPTION;
GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION;
步驟 5 在[步驟 4 ]( " ")顯示的結果中,可以看到源數據庫中所有的用戶以及對應的權限,請選擇所有需要的用戶,逐個添加到本云關系型數據庫MySQL中。