文章出處

最近發現阿里云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左右被填平。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()