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

Bri*_*ats 5 sql-server

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

数据库A.

  • 表格1
  • 表2
  • sproc x

数据库B.

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

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

  • sproc x在表1和2之间进行连接,user1可以执行.
  • sproc y在表3和4之间进行连接,user1可以执行.
  • sproc z在表1和表4之间进行连接,并且user1无法执行,除非我向表1授予SELECT权限.为什么会这样?

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

Joe*_*lli 3

您可能需要为两个数据库启用跨数据库所有权链接。

查看是否已启用:

select name, is_db_chaining_on
    from sys.databases
Run Code Online (Sandbox Code Playgroud)

要启用该设置:

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

EXEC sp_dboption 'DatabaseB', 'db_chaining', 'true';
GO
Run Code Online (Sandbox Code Playgroud)