【发布时间】:2020-01-04 14:10:16
【问题描述】:
我在数据库 A 中有一个存储过程,它引用了数据库 B 中的 3 个表。两个数据库都在服务器 1 上。
我给了用户:
- 服务器 1 上的公共权限
- 数据库 A 中存储过程的 EXECUTE 权限
- 对数据库 B 没有权限的条目
但是,这还不够。我最终不得不为数据库 B 中的 3 个表分配 SELECT 权限(加上架构上的 SELECT 权限)。然后一切正常 - 但为什么需要这样做?
对于微软来说,这不应该是这样的:
“存储过程利用所有权链接来提供对数据的访问,因此用户无需具有访问数据库对象的显式权限。”
谷歌搜索,我看到这个概念得到了证实。
这是我第一次向任何人分配权限,所以显然我遗漏了一些东西和/或误解。
编辑:“权限仅在单个数据库中链接。”这就解释了!
【问题讨论】:
-
表和存储过程是否have the same owner?
-
看看跨数据库链接
-
“这样用户就不需要有明确的权限来访问数据库对象。”不是其他数据库中的对象。权限仅在单个数据库中链接。根据用例,您要么需要查看跨数据库链接(这带有记录安全警告),要么查看签署您的 SP 并在其他数据库中授予证书权限。
标签: sql sql-server user-defined-functions