我們正在爲我們的系統構建一個管理應用程序,其中一個應用程序的功能是爲新用戶創建新數據庫。這個應用程序需要創建數據庫,RESTORE DATABASE,創建用戶,授予權限等 - 所以用戶需要有一些非常強大的權限。SQL Server:爲存儲過程中的有限用戶授予非常高的權限
我們正在將這些服務訂約給外部公司,我們不想讓他們無限制地訪問我們的系統,我們只希望他們能夠做我們允許他們做的事情。因此,我們考慮將整個過程封裝在存儲過程中,將EXECUTE授予特定的域用戶,並使用EXECUTE AS'SA'運行它。
不幸的是這是不可能的 - SA是不是一個數據庫用戶,當我們試圖將它定義爲一個,我們得到的錯誤
Msg 15405, Level 16, State 1, Line 1
Cannot use the special principal 'sa'.
然後,我們想過用DBO和建立跨數據庫所有權鏈接,但這一切都開始是一個嚴重的頭痛。 有誰知道一個優雅的方式來做到這一點?
-1如果供應商有權在可信賴的數據庫中以dbo的身份執行,則供應商實際上是'sa'。 – 2013-04-22 10:55:31
該過程不是由外部方創建的,而是由本地DBA創建的。外部方只有權執行您允許的程序。只要他沒有被授予權限,比如'create procedure'或者直接模仿,就沒有泄漏。 – muhmud 2013-04-22 11:08:57