我有DatabaseA
和DatabaseB
。在DatabaseA
是UserA
,在DatabaseB
是UserB
。SQL Server授予用戶從另一個數據庫的EXECUTE權限
UserA
有權EXECUTE
標量函數在FunctionA
DatabaseA
,UserB
有權EXECUTE
在DatabaseB
存儲過程ProcedureB
。
現在ProcedureB
使用FunctionA
,所以當UserB
執行ProcedureB
,他得到錯誤
The EXECUTE permission was denied on the object FunctionA
但是,當我試圖給他用
GRANT EXECUTE ON DatabaseA.schema.FunctionA TO UserB
允許我得到另一個錯誤:
Cannot find the user UserB, because it does not exist or you do not have permission
如何解決這個問題? ProcedureB
內有執行FunctionA
的方法嗎?UserA
?或以其他方式授予UserB
執行權限?
但是,如果我將在DatabaseA上創建UserB,那麼用戶將與DatabaseB上的UserB具有相同的用戶?我的意思是,我不會像「UserB(來自DatabaseB)與UserB(來自DatabaseA)不一樣」以及如何在DatabaseA上創建UserB?「CREATE USER UserB FOR LOGIN XYZ;' ? – therko
用戶是數據庫作用域的對象,就像你可以在多個數據庫中有一個同名的存儲過程一樣,這樣你就可以在多個數據庫中擁有一個同名的用戶,在這種情況下,你需要有一個用戶映射到兩個數據庫中的相同登錄名。如果UserB映射到DatabaseA中的登錄XYZ,它將需要DatabaseB中的相同映射。 –