• 阿里云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:SQLDATADATAMyDB.mdf' , SIZE = 5120KB , FILEGROWTH = 10%)
     LOG ON 
    ( NAME = N'MyDB_log', FILENAME = N'E:SQLDATADATAMyDB_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的高权限账号有权限限制,所以很多事情也无法更深入的去探究。目前,我们也提交、报告了这个问题,暂时还没有得到官方回复!

  • 相关阅读:
    CSS3 定位| Position研究
    ASP.NET中Partial Class部分类
    如何安全实现“记住我”的功能
    JavaScript后台代码操作HTML TABLE的方法
    强悍的CSS工具组合:Blueprint, Sass, Compass
    CSS的力量:用一个DIV画图
    ASP.NET记录错误日志的方式
    ASP.NET私有构造函数作用
    c#.net实现浏览器端大文件分块上传
    asp.net实现浏览器端大文件分块上传
  • 原文地址:https://www.cnblogs.com/kerrycode/p/11729816.html
Copyright © 2020-2023  润新知