阿里雲RDS for SQL Server的賬號管理有不少小Bug,而且有一個很嚴重的Bug:任何普通賬號,都能創建數據庫。注意,我這里是說任意普通賬號,任意任意普通賬號!任意任意普通賬號!重要的事情說三遍。
例如,下面測試環境所示,RDS for SQL Server的數據庫版本為SQL Server 2016 WEB,我們在控制平台的“賬號管理”界面,創建一個數據庫賬號test2,如下所示,只授予“只讀”權限。
我們使用腳本get_login_rights_script.sql 獲取數據庫賬號test2的具體權限如下所示:
使用test2賬號登錄數據庫,執行下面腳本就能創建一數據庫,如下所示。根據個人的測試,這個賬號可以為任意普通賬號。即使取消服務器角色setupamin與processadmin,依然是可以創建數據庫的。
CREATE DATABASE [MyDB]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'MyDB', FILENAME = N'E:\SQLDATA\DATA\MyDB.mdf' , SIZE = 5120KB , FILEGROWTH = 10%)
LOG ON
( NAME = N'MyDB_log', FILENAME = N'E:\SQLDATA\DATA\MyDB_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
GO
如果可以創建數據庫,當然也可以刪除數據庫,當然,只能刪除它自己創建的數據庫,不能刪除其它數據庫。
DROP DATABASE MyDB;
刪除不是這個賬號創建的數據庫時就會報錯。如下所示:
DROP DATABASE test4;
Msg 3701, Level 11, State 2, Line 15
Cannot drop the database 'test4', because it does not exist or you do not have permission.
是否很神奇?傳統數據庫需要有服務器角色dbcreator(當然,sysadmin角色肯定也可以) 或者授予CREATE ANY DATABASE、 CREATE DATABASE, ALTER ANY DATABASE其中一個權限才能創建數據庫。但是RDS for SQL Server的普通賬號沒有授予這些權限,卻依然可以創建數據庫。實在是想不明白它為什么有這樣一個Bug。 RDS for SQL Server的高權限賬號有權限限制,所以很多事情也無法更深入的去探究。目前,我們也提交、報告了這個問題,暫時還沒有得到官方回復!