2017-01-31 38 views
0

我有兩個數據庫。一個帶有數據,另一個帶有存儲過程。用戶不應該直接讀取數據,而只能通過存儲過程讀取數據。 在服務器和所有數據庫上啓用標誌「跨數據庫所有權鏈接」。MS SQL 2014跨數據庫訪問不工作,因爲我期望

由於SA我做:

use data_db 
create table dbo.t(....) 
insert into t values(....) 


use sp_db 

create procedure dbo.readt as 
    select * from data_db.dbo.t 

grant execute on dbo.readt to user1 

現在我重新爲USER1

execute sp_db.dbo.readt 

,我得到一個錯誤:

The server principal "user1" is not able to access the database "data_db" under the current security context.

我在做什麼錯?

回答

0

問題解決了。

我最初的願望是,普通用戶是無法在所有做「使用data_db」,因爲他們不允許直接data_db讀取任何數據。 顯然服務器不能這樣工作......奇怪,但確定。

爲SA:

use data_db 
grant connect to user1 

用戶現在能夠做到 '使用data_db' 命令,但沒有別的。 CDOC終於奏效了!

1

您需要execute as

create procedure dbo.readt 
    with execute as owner 
as 
begin 
    select * from data_db.dbo.t; 
end; 

然後,存儲過程具有的權限誰創造了它,而不是調用它的用戶。

0

您需要檢查您的用戶是否映射到您嘗試登錄的數據庫。

相關問題