我需要从C#应用程序连接到SQL Server 2008 R2数据库。我需要使用SQL Server身份验证进行连接。
用户需要哪些角色和模式,以便用户能够创建/执行存储过程?
注意:存储过程将采用dbo架构。
答案 0 :(得分:2)
这取决于您的存储过程中执行的操作。
如果只是执行SELECT
语句,db_datareader
角色应该适合执行存储过程。 db_datawriter
是角色,有资格创建它们。
答案 1 :(得分:2)
如果您想更加细致地授予您对角色的权限,请在“安全”文件夹下(在数据库下),您可以配置对给定stroed proc的执行权限。
即在管理工作室的对象浏览器中, [数据库] - >安全 - > [YourRole] - >右键单击属性 - > Securables部分
您可以在此处添加特定对象类型及其权限等。
希望这有帮助。
答案 2 :(得分:2)
创建和执行过程的权限分别记录在CREATE PROCEDURE
和EXECUTE
下。
一个重要的考虑因素是用户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在其自己的作用域中执行,因此如果您的过程使用它,那么执行用户确实需要对基础对象的权限。