我的应用程序(C#,ASP.Net)需要在数据库中插入,更新和删除数据,并运行存储过程。我需要防止其修改数据库架构 - 不更改表,创建或删除表,也不更改存储过程。
我需要授予应用程序用户什么样的权限组合?仅“select”无法使用,因为它需要在表中插入/更新/删除数据。
如何检查特定登录的权限和访问权限?如何授予或拒绝登录的权限和访问权限?我需要给一个新用户(登录)访问仅限于一个数据库的权限。
使用SQL Server 2008 R2和SSMS。
我的应用程序(C#,ASP.Net)需要在数据库中插入,更新和删除数据,并运行存储过程。我需要防止其修改数据库架构 - 不更改表,创建或删除表,也不更改存储过程。
我需要授予应用程序用户什么样的权限组合?仅“select”无法使用,因为它需要在表中插入/更新/删除数据。
如何检查特定登录的权限和访问权限?如何授予或拒绝登录的权限和访问权限?我需要给一个新用户(登录)访问仅限于一个数据库的权限。
使用SQL Server 2008 R2和SSMS。
如果你真的想在对象级别上进行控制,你可以这样做:
GRANT SELECT,UPDATE,INSERT,DELETE ON dbo.table TO user;
在模式层面上:
GRANT SELECT,UPDATE,INSERT,DELETE ON SCHEMA::dbo TO user;
理想情况下,您不应该允许针对您的表进行ad hoc DML,并且通过存储过程控制所有DML。在这种情况下,您只需要授予对存储过程本身的执行权限,而不是它所涉及的对象:
GRANT EXEC ON dbo.procedure TO user;
同样地,如果您想允许在特定模式中的所有存储过程上执行exec,您可以这样说:
GRANT EXEC ON SCHEMA::dbo TO user;
唯一的例外是当您的存储过程编写动态SQL时。在这种情况下,您可能仍然需要在动态SQL执行的上下文中对基础表应用权限,或者您可以使用EXECUTE AS OWNER
。