如何在 SQL Server 中管理角色的存储过程权限



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

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

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

我已执行

REVOKE CREATE PROCEDURE TO [ROLE NAME]

以撤消创建过程的权限,并成功执行该过程。

但是我在执行此语句时出错:

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

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

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

谢谢

来自文档创建存储过程:

权限

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

因此,仅自行提供CREATE PROCEDURE不会允许您创建过程。事实上,向ROLE授予CREATE PROCEDURE权限,而不是ALTER架构将导致以下错误:

指定的架构名称"dbo"不存在,或者您没有使用它的权限。

因此,ROLE的成员没有ALTER PROCEDURE权限,既可以CREATEALTER您需要执行的PROCEDURE

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

但是,这也将使用户能够在所述架构上ALTER任何过程。不过,Ut 还允许角色中的人员ALTER架构上的其他对象(例如表)。

如果您的ROLE有权ALTER这些过程,并且您想要删除该过程,则需要运行以下命令:

REVOKE ALTER ON SCHEMA::dbo TO YourRole;

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

请记住,REVOKE不会DENY,这只是意味着USER将不再从该ROLE继承该权限。如果USER具有其他ROLE的权限,或者他们自己拥有该权限,他们将能够继续使用该权限。如果必须阻止USER执行操作,而不考虑任何其他权限,则他们必须具有DENY权限。

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

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

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

授予执行权限 [某个角色]

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

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

最新更新