0

我在模式 dbo 下有一些存储的过程。

我也是数据库级角色:Tech,以及数据库级用户:Jack。Jack 是 Tech 的成员。

作为 sa,我能够运行: GRANT EXEC ON SCHEMA :: dbo TO Tech

然后 Jack 将拥有所有存储过程的 EXEC 权限。现在我想知道的是,是否有办法让我运行相同的命令,而不是作为 sa,而是作为 Jack,向 Jack 创建的其他用户授予相同的 EXEC 权限(Jack 确实有权创建服务器级登录,数据库级用户/角色等)?换句话说,sa 需要给 Jack 什么权限,以便 Jack 可以将 EXEC 授予 schema dbo 下的所有存储过程?

更新:我刚刚测试并发现将模式 dbo 上的 CONTROL 授予 Jack 可以做到。我现在的问题变成了: CONTROL 是使 Jack 能够在模式 dbo 上授予 EXEC 所需的绝对最小值吗?

4

2 回答 2

0

如果您需要授予某人对某事的权限,并授予他们将其授予其他人的权限,您需要使用 WITH GRANT 子句执行您的 GRANT。

于 2020-06-16T01:08:46.017 回答
0

经过测试,似乎 WITH GRANT OPTION 仅适用于用户,但不适用于角色。使用我最初问题中的示例,我们有角色 Tech 和用户 Jack,其中 Jack 是 Tech 的成员:

在 SCHEMA 上运行 GRANT EXEC :: dbo TO Tech with GRANT OPTION;不会让 Jack 将 EXEC 授予其他用户。

但是在 SCHEMA 上运行 GRANT EXEC :: dbo TO Jack WITH GRANT OPTION; 将工作。

格雷格的回答在某种程度上是正确的,他应该得到赞扬。尽管由于我自己已经弄清楚了具体细节,但我将使用自己的答案。

更新:更多信息,Microsoft 文档中找到:

GRANT ... WITH GRANT OPTION 指定接收权限的安全主体被授予将指定权限授予其他安全帐户的能力。当接收权限的主体是角色或Windows组时,当需要进一步将对象权限授予非组或角色成员的用户时,必须使用AS子句。因为只有用户而不是组或角色可以执行 GRANT 语句,所以组或角色的特定成员在授予权限时必须使用 AS 子句显式调用角色或组成员资格。以下示例显示了在授予角色或 Windows 组时如何使用 WITH GRANT OPTION。

于 2020-06-16T15:47:30.917 回答