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数据库的权限就是其中一个很重要的因素。

  • 相关阅读:
    快逸报表调用存储过程(SqlServer)
    一个睡五分钟等于六个钟头的方法 (转)
    Windows Live Writer For Windows Server 2003
    设计模式装饰者模式
    SqlServerCUBE
    Android 70道面试题汇总不再愁面试
    说服力:让你的PPT会说话
    亮剑Java项目开发案例导航
    初入社会必知的88个潜规则
    android UI进阶之仿iphone的tab效果2
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/11165754.html
Copyright © 2011-2022 走看看