我在同一个 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/