我想创建三个SQL Server数据库角色。
- 可以创建,更改和执行数据库中的所有存储过程
- 这只能执行数据库中的所有存储过程
- 无法访问数据库中的任何存储过程
我已经创建了角色,但在撤销其权限时遇到问题。
我已执行
REVOKE CREATE PROCEDURE TO [ROLE NAME]
以撤消创建过程的权限,并成功执行该过程。
但是我在执行此语句时出错:
错误:"ALTER"附近的语法不正确。
我对 SQL 服务器角色权限非常陌生,所以我的方法可能完全错误。
请引导我以正确的方式实现我的目标。
谢谢
来自文档创建存储过程:
权限
需要数据库中的 CREATE PROCEDURE 权限和 ALTER 对在其中创建过程的架构的权限。
因此,仅自行提供CREATE PROCEDURE
不会允许您创建过程。事实上,向ROLE
授予CREATE PROCEDURE
权限,而不是ALTER
架构将导致以下错误:
指定的架构名称"dbo"不存在,或者您没有使用它的权限。
因此,ROLE
的成员没有ALTER PROCEDURE
权限,既可以CREATE
又ALTER
您需要执行的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) 无法访问数据库中的任何存储过程
用户无权访问任何存储过程,除非您授予权限或将其添加到具有权限的角色。