服务器主体 "sa" 无法在当前安全上下文下访问数据库 "db1"。

liushilong2001 2011-11-30 04:32:23
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用户已经是最高权限了,为什么还有这个提示

到底如何在触发器中调用另外一个数据库(同一服务器)中的存储过程
...全文
1740 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
liushilong2001 2011-12-01
  • 打赏
  • 举报
回复
结贴给分
liushilong2001 2011-11-30
  • 打赏
  • 举报
回复
这个是肯定的,实际用的时候,肯定是另建用户,可以访问db1和db2,并只是public角色,用到什么权限,分配什么权限,用sa只是测试,并不用考虑权限问题,方便一些,
唐诗三百首 2011-11-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 liushilong2001 的回复:]
厉害,问题好了,这几句都是干啥用的?在sql2000上支持不?
[/Quote]
sorry,木有sql2000环境,应该可以吧.
shshjun 2011-11-30
  • 打赏
  • 举报
回复
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
liushilong2001 2011-11-30
  • 打赏
  • 举报
回复
厉害,问题好了,这几句都是干啥用的?在sql2000上支持不?
唐诗三百首 2011-11-30
  • 打赏
  • 举报
回复
再执行这个,

ALTER AUTHORIZATION ON DATABASE::db1 TO [sa]
ALTER AUTHORIZATION ON DATABASE::db2 TO [sa]

liushilong2001 2011-11-30
  • 打赏
  • 举报
回复
执行了,1楼的两句,有点作用,但是又出现了2楼的情况
liushilong2001 2011-11-30
  • 打赏
  • 举报
回复
消息 33009,级别 16,状态 2,过程 InsertDetaisData,第 0 行
在 master 数据库中记录的数据库所有者 SID 与在数据库 'db2' 中记录的数据库所有者 SID 不同。应该通过使用 ALTER AUTHORIZATION 语句重置数据库 'db2' 的所有者来更正此情况。

又出现了这个问题噻
唐诗三百首 2011-11-30
  • 打赏
  • 举报
回复
先执行以下打开TRUSTWORTHY.

ALTER DATABASE db1 SET TRUSTWORTHY ON
ALTER DATABASE db2 SET TRUSTWORTHY ON

22,299

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧