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

SQL Server中用户账号在数据库中的安全性,可以控制用户的权限的更多相关文章

  1. SQL Server 2008 R2 清空数据库中ldf日志文件

    /************************************************************ * Sql Server 2008 R2 清空数据库中ldf日志文件 * 将 ...

  2. SQL Server 重新初始化系统数据库中的单引号问题

    在最近的数据库跨机房迁移中,由于硬件的限制,需要滚动式地将数据库一台台迁移到新机房,先在新机房搭建一个新环境,将数据迁移过去,再将旧机房的机器下架搬到新机房,重新配置后用于下一轮的升级,重新配置过程中 ...

  3. SQL Server 在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 遇到的问题(Problems) 实现代码(SQL Codes) 方法一:拼接SQL: 方法二: ...

  4. Sql Server 导入还有一个数据库中的表数据

    在涉及到SQL Server编程或是管理时一定会用到数据的导入与导出, 导入导出的方法有多种,此处以SQL Server导入表数据为例.阐述一下: 1.打开SQL Server Management ...

  5. SQL Server 使用游标更新数据库中的数据(使用存储过程)

    ALTER PROCEDURE [dbo].[POR_CURSOR_FOR_UPDATE] --创建存储过程 AS BEGIN SET nocount ON --忽略行数显示 DECLARE Upda ...

  6. SQL Server、Oracle和MySQL中查出值为NULL的替换

    参考文献: http://database.51cto.com/art/200803/67397.htm 正文 在SQL Server Oracle MySQL当数据库中查出某值为NULL怎么办? 1 ...

  7. MySQL&SQL server&Oracle&Access&PostgreSQL数据库sql注入详解

    判断数据库的类型 当我们通过一些测试,发现存在SQL注入之后,首先要做的就是判断数据库的类型. 常用的数据库有MySQL.Access.SQLServer.Oracle.PostgreSQL.虽然绝大 ...

  8. SQL Server的非聚集索引中会存储NULL吗?

    原文:SQL Server的非聚集索引中会存储NULL吗? SQL Server的非聚集索引中会存储NULL吗? 这是个很有意思的问题,下面通过如下的代码,来说明,到底会不会存储NULL. --1.建 ...

  9. ArcSDE for SQL Server安装及在ArcMap中创建ArcSDE连接

    原文:ArcSDE for SQL Server安装及在ArcMap中创建ArcSDE连接 安装ArcSDE for SQL Server,最后一步成功后的界面如下: 在ArcMap中创建ArcSDE ...

随机推荐

  1. Github清除历史提交,保留最新提交

    有时候,需要启动一个新的分支,同时想摒弃历史信息,那么可以使用下面的方法来实现 #克隆git仓库 git clone [URL] #进入git仓库 cd [仓库名] #创建一个名为 new_branc ...

  2. rhel7学习第四天

    学习<Linux就该这么学>第二周,学习了最重要的几个文件操作命令

  3. Nginx 高级配置-https 功能

    Nginx 高级配置-https 功能 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HTTPS工作过程 1>.SSL/TLS SSL(Secure Socket Lay ...

  4. 【若泽大数据】玩转大数据之Spark零基础到实战

    https://www.bilibili.com/video/av29407581?p=1 若泽大数据官网 http://www.ruozedata.com/ tidb 系列三:有了sparkjdbc ...

  5. 第12节-BLE协议HCI层的数据格式

    学习资料: 1. 蓝牙协议core_v5.0.pdf <Vol 2: Core System Package [BR/EDR Controller volume]>的“Part E: Ho ...

  6. Hive 问题

    hive 重启连接不上 异常信息: FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache ...

  7. 张兴盼-201871010131 《面向对象程序设计(java)》第六、七周学习总结

    张兴盼-201871010131 <面向对象程序设计(java)>第六.七周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh ...

  8. 01-Eigen的安装

    Ubuntu下: 使用的IDE是Kdevelop.(使用别的也可以) 安装Kdevelop的方法见: http://www.cnblogs.com/alexYuin/p/8989228.html 1. ...

  9. mybatis框架-choose when otherwise 的使用

    需求:模拟实际业务情况,传入多条件进行查询 /** * 需求:模拟实际业务,用户传入多个条件,进行用户列表信息的查询 * @param roleids * @return */ public List ...

  10. JavaScript的深克隆与浅克隆

    JS数据类型分为两类: 基本类型(Number.Boolean.Undefined.Null.String.Symbol(ES6新加,此处不讨论))与引用类型(Object).原始类型存储的是对象的实 ...