3

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

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

注意:存储过程将在 dbo 模式中。

4

3 回答 3

3

Permissions for creating and executing procedures are documented under CREATE PROCEDURE and EXECUTE, respectively.

One important consideration is that users do not need to have permissions on the objects referenced in the procedure. You can read this in the documentation, but it's faster to test it yourself:

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;

Note that there are some exceptions: dynamic SQL executes in its own scope, so if your procedure uses it then the executing user will indeed need permission on the underlying objects.

于 2012-10-30T16:30:12.630 回答
2

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

即,在管理工作室的对象资源管理器中,[Database] -> Security -> [YourRole] -> Rightclick for properties -> Securables 部分

在这里,您可以添加特定的对象类型及其权限等。

希望这可以帮助。

于 2012-10-30T15:35:13.777 回答
1

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

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

于 2012-10-30T15:24:35.407 回答