gpt4 book ai didi

sql-server - 如何配置存储过程来访问另一个数据库中的表

转载 作者:行者123 更新时间:2023-12-03 00:17:08 25 4
gpt4 key购买 nike

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

数据库A

  • 表 1
  • 表2
  • 存储过程x

数据库B

  • 表3
  • 表 4
  • 存储过程
  • 存储过程z

我想授予 user1 访问数据库的权限,但只能通过存储过程上的 EXECUTE 权限。

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

我不想授予select权限,因为这破坏了“只能通过存储过程访问数据库”的安全模型

最佳答案

您可能需要启用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

关于sql-server - 如何配置存储过程来访问另一个数据库中的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4044295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com