最近發現阿里雲RDS管理控制檯升級了,界面更好看了,操做也更方便了,但在美麗的外表下卻藏着坑,不當心被咱們睬着了。數據庫
8月31日下午,咱們在RDS管理控制檯中建立了一個新的數據庫賬號,建立時選擇了綁定多個數據庫。安全
而後,這個新建賬戶的狀態顯示爲「建立中」,這時該新建賬戶能夠登陸,但不能訪問任何數據庫。阿里雲
過了2分多鐘,賬戶狀態由「建立中」變爲「激活」後,才能夠正常訪問所綁定的數據庫。設計
以前咱們好久沒有在RDS進行賬戶管理操做了,今天這樣一個如此簡單、如此經常使用的操做,咱們根本沒想到會出問題。blog
結果卻在2分多鐘內連踩2個坑,被坑得不輕!產品
第1個坑io
在建立新賬號時所選擇綁定的全部數據庫,在這2分鐘內,居然都沒法訪問。已經綁定這些數據庫的現有賬戶訪問時都被拒絕,錯誤信息以下:登錄
The SELECT permission was denied on the object '', database '', schema 'dbo'.object
因爲建立時選擇的數據庫比較多,結果這個問題影響到了全站。很是之鬱悶,自從使用數據庫以來,從未遇到過這樣的問題——建立新賬號居然會影響到現有賬號。權限
後來進一步發現,實際的坑比這個還要深,修改任何一個現有賬戶的數據庫綁定,都會觸發這個問題。並且修改的設置要過2分多鐘才生效。
也就是說,在RDS中,只要涉及任何數據庫賬戶權限的變更,就會引起所涉及的數據庫在短期內不能正常訪問,並且沒有任何提示或警告。
咱們向阿里雲反饋後,他們已經確認這是一個bug,說會在9月底的下一個版本中修復。
咱們的想法是:如此嚴重的bug,還要讓用戶等到9月底,24小時內修復纔是負責任的作法!
第2個坑
建立新賬號居然形成已有的數據庫賬號的數據庫綁定丟失,有的只剩下一個數據庫綁定,有的少了一兩個數據庫綁定。
向阿里雲反饋後,RDS的DBA查了才知道,當時咱們遷移至RDS時,某些在SQL Server Management Studio中的操做形成了SQL Server中的賬號與RDS中的賬號不一致,在RDS建立新賬號時發如今SQL Server中有的賬號在RDS中沒有,因而RDS就把這些賬號給幹掉了。
阿里雲說這麼作是出於安全角度考慮,出於安全角度不給SA權限,咱們能夠忍。這地方又存在什麼安全問題呢?何況,咱們的RDS只有內網受權的IP才能訪問。另外,即便必需要保持RDS與SQL Server數據庫的賬號一致,那也應該以SQL Server中的賬號爲準。由於RDS中的賬戶即便全丟失,也不會影響數據庫的正常訪問;而數據庫中的賬號只要少了一個,就可能影響到用戶的正常應用。孰輕孰重?
坑後感言
若是在設計產品時,把保證用戶應用的穩定性放在首要位置,就不會有這麼多坑!若是敢把本身的核心應用放在本身的雲上,也不會有這麼多坑!
如今的情況就如生產汽車不考慮安全問題,等用戶開車出了事故,纔去針對性地解決安全問題;而後,那些準備買車的人看到汽車這麼不安全,嚇得都不敢買了。若是真是這樣,就不會有今天的汽車工業。
更新:第1個坑在9月2日晚22:00左右被填平。