阿裡雲RDS for SQL Server的賬號管理有不少小Bug,而且有一個很嚴重的Bug:任何普通賬號,都能創建資料庫。註意,我這裡是說任意普通賬號,任意任意普通賬號!任意任意普通賬號!重要的事情說三遍。 例如,下麵測試環境所示,RDS for SQL Server的資料庫版本為SQL Serv... ...
阿裡雲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的高許可權賬號有許可權限制,所以很多事情也無法更深入的去探究。目前,我們也提交、報告了這個問題,暫時還沒有得到官方回覆!