在SQL Server身份验证中执行存储过程所需的角色

时间:2012-10-30 15:18:35

标签: c# .net sql-server

我需要从C#应用程序连接到SQL Server 2008 R2数据库。我需要使用SQL Server身份验证进行连接。

用户需要哪些角色和模式,以便用户能够创建/执行存储过程?

注意:存储过程将采用dbo架构。

3 个答案:

答案 0 :(得分:2)

这取决于您的存储过程中执行的操作。

如果只是执行SELECT语句,db_datareader角色应该适合执行存储过程。 db_datawriter是角色,有资格创建它们。

答案 1 :(得分:2)

如果您想更加细致地授予您对角色的权限,请在“安全”文件夹下(在数据库下),您可以配置对给定stroed proc的执行权限。

即在管理工作室的对象浏览器中, [数据库] - >安全 - > [YourRole] - >右键单击属性 - > Securables部分

您可以在此处添加特定对象类型及其权限等。

希望这有帮助。

答案 2 :(得分:2)

创建和执行过程的权限分别记录在CREATE PROCEDUREEXECUTE下。

一个重要的考虑因素是用户do not need对过程中引用的对象拥有权限。您可以在文档中阅读此内容,但自己测试它会更快:

create table dbo.TestTable (col1 int)
go

create procedure dbo.TestProc
as select col1 from dbo.TestTable
go

grant execute on dbo.TestProc to UserWithNoPermissions
go

execute as user = 'UserWithNoPermissions';

-- this gives error 229 (SELECT permission denied)
select * from dbo.TestTable;

-- this works
execute dbo.TestProc;

revert;

请注意,有一些例外:动态SQL在其自己的作用域中执行,因此如果您的过程使用它,那么执行用户确实需要对基础对象的权限。