jpr*_*ova 15 user-roles sql-server-2008-r2 c#-4.0
我的应用程序(C#,ASP.Net)需要在数据库中插入,更新和删除数据,并运行存储过程.我需要阻止它修改数据库模式 - 不更改表,创建或删除,不存储过程的更改.
我需要向应用程序用户授予哪些权限组合?只是'select'不起作用,因为它需要在表中插入/更新/删除数据.
如何检查特定登录的权限和访问权限?如何授予或拒绝登录权限和访问权限?我需要授予新用户(登录)权限才能访问一个数据库.
使用SQL Server 2008 R2和SSMS.
Aar*_*and 28
如果你真的想在对象级别控制它,你可以这样做:
GRANT SELECT,UPDATE,INSERT,DELETE ON dbo.table TO user;
Run Code Online (Sandbox Code Playgroud)
在架构级别:
GRANT SELECT,UPDATE,INSERT,DELETE ON SCHEMA::dbo TO user;
Run Code Online (Sandbox Code Playgroud)
但是,理想情况下,您不允许对表进行临时DML,并通过存储过程控制所有DML.在这种情况下,您只需要在程序本身上授予exec,而不是它接触的对象:
GRANT EXEC ON dbo.procedure TO user;
Run Code Online (Sandbox Code Playgroud)
同样,如果要在特定模式中允许exec执行所有过程,您可以说:
GRANT EXEC ON SCHEMA::dbo TO user;
Run Code Online (Sandbox Code Playgroud)
一个例外是当您的存储过程组成动态SQL时.在这些情况下,您可能仍需要在动态SQL执行的上下文中对基础表应用权限,或者您可以使用EXECUTE AS OWNER.