SQL Server中用户账号在数据库中的安全性,可以控制用户的权限

时间:2019-07-10 19:57:29   收藏:0   阅读:105

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

 

原文:https://www.cnblogs.com/OpenCoder/p/11165754.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!