Sql-Server

如何防止 sysadmin 伺服器角色執行儲存過程

  • April 27, 2020

我有一個使用 SQL Server 身份驗證的 SQL Server 預設實例和兩個使用者,User1 和 User2。

User1 具有公共伺服器角色,而 User2 具有公共伺服器角色 + sysadmin 伺服器角色。

我創建了一個數據庫 sptest1。在該數據庫中,我創建了一個儲存過程,sp_viewtbl還創建了一個模式。使用我禁用了為 User1 執行儲存過程的模式,它可以工作。

如何拒絕具有 sysadmin 伺服器角色的 User2 執行儲存過程?

假設我創建了 User3 並授予了 sysadmin 和 public 權限。那麼如何防止新使用者執行相同的儲存過程呢?sp_viewtbl即使他們擁有系統管理員權限,我也必須確保其他人無法登錄。

不能拒絕 sysadmin 角色的成員對 SQL Server 中的任何內容的權限。DENY (Transact-SQL)的文件指出:

…除了 DENY 不適用於對象所有者或 sysadmin 固定伺服器角色的成員。

因此,為了防止系統管理員執行儲存過程,您需要在儲存過程中放入程式碼來檢查使用者是否是系統管理員,如果是則返回錯誤。但是,系統管理員可以通過以下方式輕鬆解決此問題:

  • 修改儲存過程
  • 使用相同的程式碼創建一個新的儲存過程並刪除檢查系統管理員的部分
  • 從 SQL 客戶端執行相同的程式碼,減去檢查系統管理員的部分
  • 使用 EXECUTE AS 以其他使用者身份執行該過程

如果您的目標是防止系統管理員使用者看到敏感數據,那麼可以使用Always Encrypted。這使用只有應用程序可以訪問的密鑰加密和解密數據。如果系統管理員讀取表,他們只會看到加密數據。

引用自:https://dba.stackexchange.com/questions/265654