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


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

 

 

例如,下面測試環境所示,RDS for SQL Server的數據庫版本為SQL Server 2016 WEB,我們在控制平台的賬號管理界面,創建一個數據庫賬號test2,如下所示,只授予只讀權限。

 

clip_image001

 

 

我們使用腳本get_login_rights_script.sql 獲取數據庫賬號test2的具體權限如下所示:

 

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;

 

刪除不是這個賬號創建的數據庫時就會報錯。如下所示:

 

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的高權限賬號有權限限制,所以很多事情也無法更深入的去探究。目前,我們也提交、報告了這個問題,暫時還沒有得到官方回復!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM