SQL Server 2008如何仅授予创建/编辑存储过程的权限?
在SQL Server 2008中授予用户仅创建和编辑存储过程的权限方案
你完全不需要把开发者加到db_owner角色里——SQL Server提供了更精细的权限控制,刚好能满足你要的「只允许创建和编辑存储过程,不能随便操作数据」的需求。下面是具体的配置步骤,我会一步步讲清楚:
1. 创建一个自定义数据库角色(推荐批量管理用户)
与其逐个给用户分配权限,不如先创建一个专门的角色,之后把需要的开发者都加到这个角色里,后续维护更方便。比如我们创建一个叫db_ProcedureDeveloper的角色:
USE YourDatabaseName; -- 替换成你的数据库名 GO CREATE ROLE db_ProcedureDeveloper; GO
2. 给角色分配创建存储过程的权限
要创建存储过程,需要数据库级的CREATE PROCEDURE权限,执行下面的语句授予:
GRANT CREATE PROCEDURE TO db_ProcedureDeveloper; GO
3. 给角色分配编辑(修改)存储过程的权限
如果允许开发者修改数据库中任何已存在的存储过程,就授予ALTER ANY PROCEDURE权限;如果只允许他们修改自己创建的存储过程,其实SQL Server默认会让用户对自己创建的对象拥有修改权限,但为了确保权限足够,还是可以明确授予这个数据库级权限:
GRANT ALTER ANY PROCEDURE TO db_ProcedureDeveloper; GO
4. (可选)授予执行存储过程的权限
如果开发者需要测试自己写的存储过程,可以额外加上执行权限:
GRANT EXECUTE TO db_ProcedureDeveloper; GO
5. 将用户添加到自定义角色中
最后把需要的开发者账号加到这个角色里,替换下面的YourUserName为实际的用户名:
EXEC sp_addrolemember 'db_ProcedureDeveloper', 'YourUserName'; GO
关键注意事项
- 确保不要把用户加到
db_owner、db_datawriter、db_datareader这些角色里,否则他们会获得数据库的CRUD权限,这正是你要避免的。 - 如果你的存储过程是在非
dbo的自定义架构下创建的,还需要给角色授予该架构的ALTER权限,比如:
GRANT ALTER ON SCHEMA::YourCustomSchema TO db_ProcedureDeveloper; GO
这样配置完成后,开发者就能正常创建和编辑存储过程,但无法对数据库里的表进行插入、更新、删除或查询操作,完美符合你的需求。
内容的提问来源于stack exchange,提问作者Carlos




