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數據庫的權限就是其中一個很重要的因素。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM