zoukankan      html  css  js  c++  java
  • SQL Server中用户账号在数据库中的安全性,可以控制用户的权限

    今天在公司SQL Server数据库中,查到一个SQL Server用户账号"DemoUser":

    "DemoUser"不在数据库服务器的sysadmin角色中:

    "DemoUser"在数据库"TestDB"中做了用户映射,映射后的数据库账号也叫"DemoUser",其默认SCHEMA为"dbo":

    "DemoUser"在数据库"TestDB"中不拥有任何SCHEMA:

    "DemoUser"在数据库"TestDB"中没有db_owner权限:

    但是奇怪的是,"DemoUser"连接到数据库"TestDB"后,居然可以执行src这个SCHEMA下的存储过程"[src].[SP_ShowUsers]":

    这就很奇怪了,为什么SQL Server账号"DemoUser"并不是数据库服务器管理员(sysadmin),也没有数据库"TestDB"的db_owner权限,也不拥有src这个SCHEMA,却可以成功执行"EXEC [src].[SP_ShowUsers]",这个存储过程?

    后来我才发现原来"DemoUser"拥有数据库"TestDB"的EXECUTE权限:

    我们可以看到默认情况下,上面这张窗口截图中,左边Securables选项点开后右边列表为空,我们可能就会认为"DemoUser"没有数据库"TestDB"的任何权限啊?

    其实不然,我们点击右上角的Search按钮:

    然后选择All objects of the types:

    然后将Databases勾上:

    这时我们就会发现窗口列表中,出现了用户"DemoUser"在数据库"TestDB"中拥有的权限,其中在窗口下面的Explicit选项卡中,我们可以看到"DemoUser"拥有数据库"TestDB"的EXECUTE权限:

    窗口下面的Effective选项卡(Effective选项卡的内容,会受到很多因素的影响,例如:SQL Server账号在数据库服务器的角色(Server Roles),SQL Server账号在单个数据库的权限(Membership),在上面截图中Explicit选项卡中的权限等)也会列出"DemoUser"拥有的权限,其中就有EXECUTE权限:

    而数据库"TestDB"的EXECUTE权限,也可以用下面的SQL语句赋予用户"DemoUser":

    USE [TestDB]
    GRANT EXECUTE TO [DemoUser]

    只要SQL Server账号拥有了数据库的EXECUTE权限,那么该账号就可以在对应的数据库上执行存储过程,这也是为什么本文中SQL Server账号"DemoUser"可以在数据库"TestDB"中执行存储过程的原因。

    所以影响一个SQL Server账号行为的因素很多,而账号所拥有SQL Server数据库的权限就是其中一个很重要的因素。

  • 相关阅读:
    [UWP] 为WinRT组件创建Nuget包
    再见北京,深圳你好
    [UWP] 用 AudioGraph 来增强 UWP 的音频处理能力——AudioFrameInputNode
    [UWP] 用 AudioGraph 来增强 UWP 的音频处理能力
    UWP 多语言的三个概念
    利用 Win32 启动和检测 UWP App 的方法
    反向代理教务系统
    [UWP] Custom Capability的使用
    [UWP]针对UWP程序多语言支持的总结,含RTL
    Xamarin自定义布局系列——支持无限滚动的自动轮播视图CarouselView
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/11165754.html
Copyright © 2011-2022 走看看