sql server service broker中調用存儲過程執行跨庫操作,不管怎么設置都一直提示 服務器主體 "sa" 無法在當前安全上下文下訪問數據庫 "dbname"。


用sql server自帶的消息隊列service borker,調用存儲過程中,執行了一個跨庫的操作,先是用了一個用戶,權限什么都給夠了,但是一直提示 服務器主體 "user" 無法在當前安全上下文下訪問數據庫 "dbname"。

想着是架構方面的問題,換sa還是不行。查到微軟的一篇文章 提示需要開數據庫的 ALTER DATABASE current_db SET TRUSTWORTHY ON 

我把跨的那個庫設置了還是不行。最后自己寫測試代碼,代碼如下:

create database test1

create database test2

use test2
create table t_1 (id int ,ddate date )
insert into t_1 (id,ddate) values(1,GETDATE())

use test1 

create proc p_test
WITH EXECUTE AS OWNER
as
begin
 select GETDATE()
 select * from test2..t_1
end

exec  p_test




ALTER DATABASE test1 SET TRUSTWORTHY on
ALTER DATABASE test2 SET TRUSTWORTHY ON

兩個庫都 SET TRUSTWORTHY on  卻可以了。。。。。。折騰了一天時間。。。。。。。。。。

EXECUTE AS OWNER 設置會話的執行上下文。隊列里去不掉,要解決有兩個方法 ,上面是方法其一,其二是用證書。。。。。。。

查看看到哪些數據庫開了trustworthy屬性,命令如下:
SELECT name, database_id, is_trustworthy_on FROM sys.databases

授權用戶訪問,命令如下:

ALTER AUTHORIZATION ON DATABASE::數據庫名 TO [用戶名]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM