我需要从 C# 应用程序连接到 SQL Server 2008 R2 数据库。我需要使用 SQL Server 身份验证进行连接。
用户需要哪些角色和架构,以便用户能够创建/执行存储过程?
注意:存储过程将在 dbo 模式中。
我需要从 C# 应用程序连接到 SQL Server 2008 R2 数据库。我需要使用 SQL Server 身份验证进行连接。
用户需要哪些角色和架构,以便用户能够创建/执行存储过程?
注意:存储过程将在 dbo 模式中。
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.
如果您想更细致地授予角色权限,请在“安全”文件夹(数据库下)下,您可以配置对给定 stroed proc 的执行权限。
即,在管理工作室的对象资源管理器中,[Database] -> Security -> [YourRole] -> Rightclick for properties -> Securables 部分
在这里,您可以添加特定的对象类型及其权限等。
希望这可以帮助。
这取决于在存储过程中执行的操作。
如果您只是执行SELECT
语句,则该db_datareader
角色应该适合执行您的存储过程。db_datawriter
是有资格创建它们的角色。