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数据库的权限就是其中一个很重要的因素。
SQL Server中用户账号在数据库中的安全性,可以控制用户的权限的更多相关文章
- SQL Server 2008 R2 清空数据库中ldf日志文件
/************************************************************ * Sql Server 2008 R2 清空数据库中ldf日志文件 * 将 ...
- SQL Server 重新初始化系统数据库中的单引号问题
在最近的数据库跨机房迁移中,由于硬件的限制,需要滚动式地将数据库一台台迁移到新机房,先在新机房搭建一个新环境,将数据迁移过去,再将旧机房的机器下架搬到新机房,重新配置后用于下一轮的升级,重新配置过程中 ...
- SQL Server 在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 遇到的问题(Problems) 实现代码(SQL Codes) 方法一:拼接SQL: 方法二: ...
- Sql Server 导入还有一个数据库中的表数据
在涉及到SQL Server编程或是管理时一定会用到数据的导入与导出, 导入导出的方法有多种,此处以SQL Server导入表数据为例.阐述一下: 1.打开SQL Server Management ...
- SQL Server 使用游标更新数据库中的数据(使用存储过程)
ALTER PROCEDURE [dbo].[POR_CURSOR_FOR_UPDATE] --创建存储过程 AS BEGIN SET nocount ON --忽略行数显示 DECLARE Upda ...
- SQL Server、Oracle和MySQL中查出值为NULL的替换
参考文献: http://database.51cto.com/art/200803/67397.htm 正文 在SQL Server Oracle MySQL当数据库中查出某值为NULL怎么办? 1 ...
- MySQL&SQL server&Oracle&Access&PostgreSQL数据库sql注入详解
判断数据库的类型 当我们通过一些测试,发现存在SQL注入之后,首先要做的就是判断数据库的类型. 常用的数据库有MySQL.Access.SQLServer.Oracle.PostgreSQL.虽然绝大 ...
- SQL Server的非聚集索引中会存储NULL吗?
原文:SQL Server的非聚集索引中会存储NULL吗? SQL Server的非聚集索引中会存储NULL吗? 这是个很有意思的问题,下面通过如下的代码,来说明,到底会不会存储NULL. --1.建 ...
- ArcSDE for SQL Server安装及在ArcMap中创建ArcSDE连接
原文:ArcSDE for SQL Server安装及在ArcMap中创建ArcSDE连接 安装ArcSDE for SQL Server,最后一步成功后的界面如下: 在ArcMap中创建ArcSDE ...
随机推荐
- flask项目结构
project/ app/ # 整个程序的包目录 static/ # 静态资源文件 js/ # JS脚本 css/ # 样式表 img/ # 图片 favicon.ico # 网站图标 templat ...
- django-URL路由系统
配置 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个U ...
- HDU3507:Print Article(斜率优化dp)
传送门 题意: 现有\(n\)个数,每个数的值为\(a_i\),现在可以把数划分为多段,每一段的代价为\((\sum_{k=i}^{j}c_i)^2+M\). 问怎么划分,代价最小. 思路: 考虑dp ...
- Latex使用过程中的一些总结
本文主要总结在使用Latex过程中遇到的一些问题及解决方案. 一:关于参考文献 1.如何在paper同一处用\cite命令同时引用多篇文献? 用\cite{bibtex1}\cite{bibtex2} ...
- gitlab的搭建和使用(转)
工作当中常用的GitHub比较好用,但是安全性不是太强,因为github完全开源的,安全性不高 有空搞一下,先记录几个博客 https://yq.aliyun.com/articles/44531 h ...
- 13-C#笔记-数组
# 1 初始化 double[] balance = new double[10]; // 隐式初始化为0 double[] balance = { 2340.0, 4523.69, 3421.0}; ...
- vue社区活跃整合
===框架===== Nuxt(vue ssr服务端渲染) Quasar Framework 一个可以搭建多平台响应式网站的框架 Weex 是一个使用 Web 开发体验来开发高性能原生应用的框架. = ...
- python3中“->”的含义
->:标记返回函数注释,信息作为.__annotations__属性提供 __annotations__属性是字典.键return是用于在箭头后检索值的键.但是在Python中3.5,PEP 4 ...
- jQuery高级案例
一.广告的自动显示与隐藏 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- 《Attack ML Models - 李宏毅》视频笔记(完结)
Attack ML Models - 李宏毅 https://www.bilibili.com/video/av47022853 Training的Loss:固定x,修改θ,使y0接近ytrue. N ...