最近發現阿里云RDS管理控制臺升級了,界面更好看了,操作也更方便了,但在美麗的外表下卻藏著坑,不小心被我們睬著了。
8月31日下午,我們在RDS管理控制臺中創建了一個新的數據庫帳號,創建時選擇了綁定多個數據庫。
然后,這個新建帳戶的狀態顯示為“創建中”,這時該新建帳戶可以登錄,但不能訪問任何數據庫。
過了2分多鐘,帳戶狀態由“創建中”變為“激活”后,才可以正常訪問所綁定的數據庫。
之前我們很久沒有在RDS進行帳戶管理操作了,今天這樣一個如此簡單、如此常用的操作,我們根本沒想到會出問題。
結果卻在2分多鐘內連踩2個坑,被坑得不輕!
第1個坑
在創建新帳號時所選擇綁定的所有數據庫,在這2分鐘內,竟然都無法訪問。已經綁定這些數據庫的現有帳戶訪問時都被拒絕,錯誤信息如下:
The SELECT permission was denied on the object '', database '', schema 'dbo'.
由于創建時選擇的數據庫比較多,結果這個問題影響到了全站。非常之郁悶,自從使用數據庫以來,從未遇到過這樣的問題——創建新帳號竟然會影響到現有帳號。
后來進一步發現,實際的坑比這個還要深,修改任何一個現有帳戶的數據庫綁定,都會觸發這個問題。而且修改的設置要過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左右被填平。
文章列表