2016-12-15 98 views
0

我有DatabaseADatabaseB。在DatabaseAUserA,在DatabaseBUserBSQL Server授予用戶從另一個數據庫的EXECUTE權限

UserA有權EXECUTE標量函數在FunctionADatabaseAUserB有權EXECUTEDatabaseB存儲過程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執行權限?

回答

0

你很近!錯誤消息告訴你UserB在DatabaseA中不存在,所以你需要創建它。一旦你這樣做,你應該能夠授予許可,一切都應該工作。

+0

但是,如果我將在DatabaseA上創建UserB,那麼用戶將與DatabaseB上的UserB具有相同的用戶?我的意思是,我不會像「UserB(來自DatabaseB)與UserB(來自DatabaseA)不一樣」以及如何在DatabaseA上創建UserB?「CREATE USER UserB FOR LOGIN XYZ;' ? – therko

+0

用戶是數據庫作用域的對象,就像你可以在多個數據庫中有一個同名的存儲過程一樣,這樣你就可以在多個數據庫中擁有一個同名的用戶,在這種情況下,你需要有一個用戶映射到兩個數據庫中的相同登錄名。如果UserB映射到DatabaseA中的登錄XYZ,它將需要DatabaseB中的相同映射。 –

相關問題