如何配置存储过程以访问另一个数据库中的表

时间:2010-10-28 15:17:26

标签: sql-server

我在同一个SQL Server上有两个数据库:

数据库A

  • 表1
  • 表2
  • sproc x

数据库B

  • 表3
  • 表4
  • sproc y
  • sproc z

我想让user1访问数据库,但只能通过sprocs的EXECUTE权限。

  • sproc x在表1和表1之间进行连接。 2,user1可以执行。
  • sproc y在表3之间进行连接 &安培; 4,用户1可以执行。
  • sproc z在表1之间进行连接 &安培; 4,user1无法执行, 除非我授予SELECT权限 表1.这是为什么?

我不想授予select权限,因为这打破了“仅通过sprocs访问数据库”的安全模型

2 个答案:

答案 0 :(得分:3)

您可能需要为这两个数据库启用cross database ownership chaining

要查看它是否已启用:

select name, is_db_chaining_on
    from sys.databases

启用设置:

EXEC sp_dboption 'DatabaseA', 'db_chaining', 'true';
GO

EXEC sp_dboption 'DatabaseB', 'db_chaining', 'true';
GO

答案 1 :(得分:1)

我确实遇到了这个问题但在我的情况下解决方案是更新两个数据库以拥有相同的所有者。

如果数据库归同一所有者所有,则无需明确启用所有权链接(因为所有者是同一个)。

关于此的好文章:[http://www.sommarskog.se/grantperm.html] [1]

您可以使用sp_changedbowner或“ALTER AUTHORIZATION”语句更新数据库的所有权以获取更新版本。