2

在某些存儲過程中,我必須將安全性上下文更改爲更強大的登錄。 我想是這樣的:SQL SERVER在存儲過程內部更改安全性問題

USE ProjectsDB 
EXECUTE AS login = 'sa' 

--SOME OPERATIONS 

REVERT; 

,但我得到了以下錯誤消息:

Msg 15406, Level 16, State 1, Line 3 
Cannot execute as the server principal because the principal "sa" does not exist, 
this type of principal cannot be impersonated, or you do not have permission. 

「山」的登錄提供一切必要的權限存在。 可能是什麼問題?

Ilan。

回答

3

您需要具有「IMPERSONATE」權限才能執行此操作。查看GRANT IMPERSONATE聲明。

除此之外,我認爲最好的方式做到這一點(而不是撞了權限級別SA)在SQL Server是:

  • 創建證書
  • 註冊存儲過程與證書
  • 從證書
  • 刪除私鑰從證書
  • 格蘭特創建一個用戶所需的權限給用戶

可選,如果你需要「服務器寬權利」:

  • 證書導出到磁盤
  • 導入在master數據庫中的證書
  • 創建從證書
  • 格蘭特登錄的適當的登錄權

如果您需要「跨數據庫權限」,更多可選

  • 進口在要授予權限
  • 創建的證書的用戶數據庫中的證書。
  • 通過證書授予正確權限的用戶

SQL Server將鏈中的所有用戶/登錄權限在一起,當你執行已簽署的過程會使用鏈接到該證書的用戶的權限。

+0

@Flip哇!!!!!!!!!!!!你能推薦一些涵蓋所有這些的書(電子書)嗎? :) – Ilan

+1

Erland Sommarskog有最好的信息(像往常一樣)http://www.sommarskog.se/grantperm.html –

+0

非常感謝!!!!!!!!!!!!!!!! – Ilan