阿里雲RDS for SQL Serrver關於權限的一個嚴重Bug

阿里雲RDS for SQL Server的帳號管理有很多小Bug,並且有一個很嚴重的Bug:任何普通帳號,都能建立數據庫。注意,我這裏是說任意普通帳號,任意任意普通帳號!任意任意普通帳號!重要的事情說三遍。sql

 

 

例如,下面測試環境所示,RDS for SQL Server的數據庫版本爲SQL Server 2016 WEB,咱們在控制平臺的帳號管理界面,建立一個數據庫帳號test2,以下所示,只授予只讀權限。數據庫

 

clip_image001服務器

 

 

咱們使用腳本get_login_rights_script.sql 獲取數據庫帳號test2的具體權限以下所示:app

 

clip_image002

 

使用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;spa

 

刪除不是這個帳號建立的數據庫時就會報錯。以下所示:code

 

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的高權限帳號有權限限制,因此不少事情也沒法更深刻的去探究。目前,咱們也提交、報告了這個問題,暫時尚未獲得官方回覆!orm

相關文章
相關標籤/搜索