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

标签 sql-server

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

相关文章:

sql - 如何拥有引用另一个表的检查约束?

sql-server - 添加列,然后在同一脚本中插入值,解析器不会提示

sql - 在 Azure Web 应用程序中发布 MVC 应用程序

c# - Linq To SQL 删除+插入最佳实践

sql-server - 如何在 SQL Server 中存储阿拉伯语?

sql - 将函数作为参数传递给存储过程

c# - 从组合框 C# 表单发送文本作为 SQL 过程的输入

sql - 具有多对多表的数据透视表

sql-server - 这是在存储过程中使用可选参数的正确方法吗?

sql-server - SQLServer 2005 中 Postgres 的 RAISE NOTICE 相当于什么?