背景
- 在ranger admin部署的官方文檔中,配置文件要求要有DB的root用戶名和密碼蜂科。但在實(shí)際生產(chǎn)應(yīng)用中,一般都是使用DBA創(chuàng)建好的庫,很難要到root用戶的密碼抠刺。
- 網(wǎng)上的很多參考文章,一般都是自己本地部署的mysql服務(wù)器摘昌,因此是能獲取到root密碼的速妖。如果沒有root密碼的話則可參考下此文章
- 剛開始以為要不到賬戶的話,那么我可以就要權(quán)限啊聪黎,畢竟有權(quán)限的了也就不需要root用戶了罕容,但是實(shí)際權(quán)限也是要不到的!那么只能從邏輯入手了稿饰。
解決
- ranger admin每次修改配置(install.properties)都需要重新的編譯(./setup.sh)锦秒,編譯過程會把配置重新寫入,不然怎么重啟ranger admin都不生效的喉镰。
- 簡單來說旅择,編譯過程主要代碼邏輯是執(zhí)行dba_script.py, ranger_credential_helper.py侣姆,db_setup.py三個py腳本生真,其中需要root權(quán)限是在dba_script.py中使用到的沉噩。
- dba_script.py執(zhí)行授權(quán)的過程,使用root權(quán)限除了一些對元數(shù)據(jù)的select請求外柱蟀,核心作用是為用戶授予庫的權(quán)限川蒙。如假設(shè)我當(dāng)前是A用戶,那么會使用root用戶去執(zhí)行命令
grant all privileges on ranger.* to 'A'@'%' with grant option;
grant all privileges on ranger.* to 'A'@'localhost' with grant option;
- 從setup.sh中查看調(diào)用dba_script.py執(zhí)行的代碼
run_dba_steps(){
getPropertyFromFileNoExit 'setup_mode' $PROPFILE setup_mode false
if [ "x${setup_mode}x" == "xSeparateDBAx" ]; then
log "[I] Setup mode is set to SeparateDBA. Not Running DBA steps. Please run dba_script.py before running setup..!";
else
log "[I] Setup mode is not set. Running DBA steps..";
python dba_script.py -q
fi
}
- 因?yàn)橹纑anger使用root密碼的目的是為用戶授予庫的權(quán)限产弹,如果我們已經(jīng)授權(quán)好派歌,那么root密碼應(yīng)該可以是非必須的。從上面看如果setup_mode設(shè)置為xSeparateDBAx的話痰哨,則if邏輯不會走dba_script.py這個腳本(前提是我們先把授權(quán)操作做了)
- 關(guān)于如何將setup_mode,從setup.sh可以指定這個install.properties中的配置項(xiàng)胶果,因此只要設(shè)置它的值即可。
#------------------------- DB CONFIG - BEGIN ----------------------------------
# Uncomment the below if the DBA steps need to be run separately
setup_mode=SeparateDBA
例子
- 如下創(chuàng)建用戶并授權(quán)斤斧,然后重新執(zhí)行./setup.sh就可以編譯通過了早抠。下例演示的是本地mysql的例子,如果是平時生產(chǎn)應(yīng)用由DBA提供的話撬讽,則只有確保對應(yīng)用戶擁有庫的全部權(quán)限即可蕊连。
#修改install.properties中的配置
setup_mode=SeparateDBA
#用root登陸本地mysql服務(wù)器
CREATE USER 'test'@'localhost' IDENTIFIED BY 'test123';
grant all privileges on ranger.* to 'test'@'%' with grant option;
grant all privileges on ranger.* to 'test'@'localhost' with grant option;
FLUSH PRIVILEGES;
#修改install.properties中的配置
db_root_user=test
db_root_password=******
db_user=test
db_password=******