【问题标题】:How can I manage stored procedure rights of the role in SQL Server如何在 SQL Server 中管理角色的存储过程权限
【发布时间】:2021-06-02 00:14:49
【问题描述】:

我想创建三个 SQL Server 数据库角色。

  1. 可以创建、更改和执行数据库中的所有存储过程
  2. 那只能执行数据库中的所有存储过程
  3. 无权访问数据库中的任何存储过程

我已创建角色,但在撤销其权限时遇到问题。

我已经执行了

REVOKE CREATE PROCEDURE TO [ROLE NAME]

撤销创建过程的权限并成功执行。

但执行此语句时出现错误:

错误:“ALTER”附近的语法不正确。

我对 SQL 服务器角色权限非常陌生,所以我的方法可能完全错误。

请指导我以正确的方式实现我的目标。

谢谢

【问题讨论】:

  • 你用什么使ROLE能够ALTER存储过程? GRANT ALTER PROCEDURE TO YourRole; 会给你同样的错误。

标签: sql-server sqlroleprovider sql-revoke


【解决方案1】:

来自文档Create a Stored Procedure

权限

需要数据库中的 CREATE PROCEDURE 权限和 ALTER 对正在其中创建过程的架构的权限。

因此,仅提供CREATE PROCEDURE 将不允许您创建过程。事实上,给ROLECREATE PROCEDURE 权限,而不是ALTER 在架构上将导致以下错误:

指定的架构名称“dbo”要么不存在,要么您没有使用它的权限。

没有ALTER PROCEDURE 权限,因此,ROLE 的成员能够同时拥有CREATEALTERPROCEDURE 您需要这样做:

GRANT CREATE PROCEDURE TO YourRole;
GRANT ALTER ON SCHEMA::dbo TO YourRole; --Replace with appropriate schema name

然而,这也将使用户能够ALTER 所述架构上的任何过程。不过,您也可以让角色中的人ALTER 架构上的其他对象(例如表)。

如果您的ROLE 拥有ALTER 程序的权限并且您想要删除它,您需要运行以下命令:

REVOKE ALTER ON SCHEMA::dbo TO YourRole;

如前所述,这也将撤销他们ALTER 所述架构上的任何其他对象的能力。

记住,REVOKE 不是DENY,它只是意味着USER 不会再从ROLE 继承该权限。如果USER拥有另一个ROLE的权限,或者他们自己拥有该权限,他们将能够继续使用该权限。如果您必须阻止USER 执行操作,无论其他任何权限如何,他们都必须具有DENY 权限。

【讨论】:

  • 这意味着如果我执行 REVOKE ALTER ON SCHEMA::dbo TO [ROLE NAME]。那么它不会允许用户 ALTER 表、函数、查看任何东西?
【解决方案2】:

1) 可以创建、更改和执行所有存储过程 数据库

这是 db_owner 角色,或对数据库的 CONTROL 权限。拥有所有这些权限的任何人都可以将自己的权限提升到数据库级管理员。所以不要尝试。

2) 只能执行数据库中的所有存储过程

授予 [SomeRole] 执行权限

3) 无权访问数据库中的任何存储过程

除非您授予权限或将其添加到具有权限的角色,否则用户无权访问任何存储过程。

【讨论】:

    猜你喜欢
    • 2021-01-23
    • 2011-09-22
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 2014-12-23
    相关资源
    最近更新 更多