首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

服务器主体 "sa" 无法在当前安全上下文下访问数据库 "db1"该如何解决

2012-01-29 
服务器主体 sa 无法在当前安全上下文下访问数据库 db1。sql2008同一服务器附加两个数据库 db1 和db2db1

服务器主体 "sa" 无法在当前安全上下文下访问数据库 "db1"。
sql2008同一服务器附加两个数据库 db1 和db2
db1中建一表A,和一个存储过程A
db2中建有一表B,表B上有一个触发器(insert 触发),和一个存储过程B.

我用管理员sa 用户登录,执行存储过程B,向表B中写入一条数据,在B表的触发器中调用数据库db1中的存储过程A,
触发器中的调用格式为:
exec db1.dbo.A 参数1,参数2,....

结果出现
消息 916,级别 14,状态 1,过程 TRGDetialsData,第 47 行
服务器主体 "sa" 无法在当前安全上下文下访问数据库 "db1"。

我的sa用户已经是最高权限了,为什么还有这个提示

到底如何在触发器中调用另外一个数据库(同一服务器)中的存储过程

[解决办法]
先执行以下打开TRUSTWORTHY.

SQL code
 ALTER DATABASE db1 SET TRUSTWORTHY ON ALTER DATABASE db2 SET TRUSTWORTHY ON
[解决办法]
再执行这个,
SQL code
ALTER AUTHORIZATION ON DATABASE::db1 TO [sa]ALTER AUTHORIZATION ON DATABASE::db2 TO [sa]
[解决办法]
select * from db1..sysusers where [name] = 'dbo'
select * from db2..sysusers where [name] = 'dbo'

以上可以看到你的两个dbo的sid可能不同,这种情况在导入数据库时很常见。

不过不建议你使用sa作为你的实际用户。解决方法请参考 (英文):
http://stackoverflow.com/questions/3837841/running-trigger-that-calls-stored-procedure-on-another-database

热点排行