阿里云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

相关文章
相关标签/搜索