0

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

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

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

我已经执行了

REVOKE CREATE PROCEDURE TO [ROLE NAME]

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

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

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

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

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

谢谢

4

2 回答 2

1

从文档中创建存储过程

权限

需要数据库中的 CREATE PROCEDURE 权限和创建过程的模式的 ALTER 权限。

因此,仅仅给予CREATE PROCEDURE它自己不会让你创建一个程序。事实上,授予ROLE权限CREATE PROCEDURE,而不是ALTER架构将导致以下错误:

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

ALTER PROCEDURE因此,没有权限让 a 的成员ROLE能够同时CREATE执行ALTERaPROCEDURE您需要执行的操作:

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对所述模式上的任何其他对象的能力。

请记住,REVOKEDENY,它只是意味着USER不会再从那里继承该权限ROLE。如果USER拥有其他人的权限ROLE,或者他们自己拥有权限,他们将能够继续使用该权限。如果您必须停止USER执行某项操作,无论是否有任何其他权限,他们都必须拥有该DENY权限。

于 2020-02-25T11:58:30.977 回答
0

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

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

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

授予 [SomeRole] 执行权限

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

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

于 2020-02-25T12:38:30.103 回答