新聞中心
前陣回收生產(chǎn)帳號(hào)的訪問范圍,即之前是xxx@"%"的帳號(hào)命名方式,修改成若干個(gè)以前端應(yīng)用部署的機(jī)器IP為準(zhǔn),修改成xxx@"IP address"。盡量減少不可信客戶端連接數(shù)據(jù)庫(kù)的情況發(fā)生,加強(qiáng)數(shù)據(jù)安全。
但是回收xxx@"%"帳號(hào)后發(fā)現(xiàn),生產(chǎn)一子系統(tǒng)一直報(bào)錯(cuò),xxx@"%"帳號(hào)不存在的異常。一開始通過檢查生產(chǎn)代碼的jdbc數(shù)據(jù)庫(kù)連接串的配置,發(fā)現(xiàn)地址配置成服務(wù)器的主機(jī)名。懷疑是由于域名被錯(cuò)誤解析成外網(wǎng)的IP地址導(dǎo)致,將其修改為內(nèi)網(wǎng)的IP后重新發(fā)版本后仍然存在相同報(bào)錯(cuò)。
后來經(jīng)過排查后最終發(fā)現(xiàn),由于該子系統(tǒng)還采用觸發(fā)器,只不過之前寫觸發(fā)器的時(shí)候沒有定義definer,導(dǎo)致該觸發(fā)器的definer默認(rèn)為當(dāng)前編寫該觸發(fā)器的用戶,即:xxx@"%"。
原來,mysql在刪除用戶的時(shí)候,只會(huì)影響到mysql系統(tǒng)庫(kù)的user表、db表和tables_priv表,而該用戶創(chuàng)建的觸發(fā)器是不會(huì)被連帶刪除掉的,因?yàn)橛|發(fā)器的信息都保存在information.schema庫(kù)的triggers表里面。所以,其他普通用戶(沒有管理員權(quán)限)想要調(diào)用其他用戶的觸發(fā)器的時(shí)候,就會(huì)報(bào)錯(cuò)。
問題定位出來了,就容易解決了:
1、刪掉原先的xxx@"%"的觸發(fā)器,重新定義definer為xxx@"IP address"的觸發(fā)器
2、普通帳號(hào)能調(diào)用觸發(fā)器,需要配置triggers的權(quán)限,要不會(huì)報(bào)trigger權(quán)限報(bào)錯(cuò)。
總結(jié)一下:
數(shù)據(jù)庫(kù)之所以為數(shù)據(jù)庫(kù),就是其存儲(chǔ)數(shù)據(jù)和檢索數(shù)據(jù)的能力強(qiáng)大,雖然數(shù)據(jù)庫(kù)也有觸發(fā)器、自定義函數(shù)和存儲(chǔ)過程這類functions,但是functions的執(zhí)行是犧牲了數(shù)據(jù)庫(kù)部分性能來實(shí)現(xiàn)的。而且也會(huì)導(dǎo)致前端應(yīng)用同后端服務(wù)緊耦合,前端有變更,后續(xù)服務(wù)也要跟著變。所以,除非是一些特殊的場(chǎng)景如BI、數(shù)據(jù)分析等,一般生產(chǎn)環(huán)境都禁用trigger、functions和 stored procedure。將其功能實(shí)現(xiàn)在代碼層面,減少數(shù)據(jù)庫(kù)的負(fù)載。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
當(dāng)前題目:一次mysql用戶不存在的報(bào)錯(cuò)-創(chuàng)新互聯(lián)
文章鏈接:http://www.dlmjj.cn/article/dgjcgc.html