【问题标题】:EXECUTE permission not sufficient to use Stored Procedure. Also have to give SELECT permissions on underlying objects. Why?EXECUTE 权限不足以使用存储过程。还必须授予对基础对象的 SELECT 权限。为什么?
【发布时间】:2020-01-04 14:10:16
【问题描述】:

我在数据库 A 中有一个存储过程,它引用了数据库 B 中的 3 个表。两个数据库都在服务器 1 上。

我给了用户:

  • 服务器 1 上的公共权限
  • 数据库 A 中存储过程的 EXECUTE 权限
  • 对数据库 B 没有权限的条目

但是,这还不够。我最终不得不为数据库 B 中的 3 个表分配 SELECT 权限(加上架构上的 SELECT 权限)。然后一切正常 - 但为什么需要这样做?

对于微软来说,这不应该是这样的:

“存储过程利用所有权链接来提供对数据的访问,因此用户无需具有访问数据库对象的显式权限。”

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/managing-permissions-with-stored-procedures-in-sql-server

谷歌搜索,我看到这个概念得到了证实。

这是我第一次向任何人分配权限,所以显然我遗漏了一些东西和/或误解。

编辑:“权限仅在单个数据库中链接。”这就解释了!

【问题讨论】:

  • 表和存储过程是否have the same owner
  • 看看跨数据库链接
  • “这样用户就不需要有明确的权限来访问数据库对象。”不是其他数据库中的对象。权限仅在单个数据库中链接。根据用例,您要么需要查看跨数据库链接(这带有记录安全警告),要么查看签署您的 SP 并在其他数据库中授予证书权限。

标签: sql sql-server user-defined-functions


【解决方案1】:

“权限仅在单个数据库中链接。”根据拉努的评论。这就解释了。

【讨论】:

    猜你喜欢
    • 2011-05-07
    • 2017-08-12
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多