22

我的应用程序(C#、ASP.Net)需要在数据库中插入、更新和删除数据,并运行存储过程。我需要防止它修改数据库架构——不更改表、创建或删除、不更改存储过程。

我需要向应用程序用户授予什么权限组合?只是“选择”是行不通的,因为它需要在表中插入/更新/删除数据。

如何检查特定登录的权限和访问权限?如何授予或拒绝登录权限和访问权限?我需要授予新用户(登录)权限以仅访问一个数据库。

使用带有 SSMS 的 SQL Server 2008 R2。

4

1 回答 1

43

如果你真的想在对象级别控制它,你可以这样做:

GRANT SELECT,UPDATE,INSERT,DELETE ON dbo.table TO user;

在架构级别:

GRANT SELECT,UPDATE,INSERT,DELETE ON SCHEMA::dbo TO user;

但是,理想情况下,您不会允许针对您的表的 ad hoc DML,并通过存储过程控制所有 DML。在这种情况下,您只需要在过程本身上授予 exec 权限,而不是对其接触的对象:

GRANT EXEC ON dbo.procedure TO user;

同样,如果您想允许对特定模式中的所有过程执行 exec,您可以说:

GRANT EXEC ON SCHEMA::dbo TO user;

一个例外是当您的存储过程组成动态 SQL 时。在这些情况下,您可能仍需要在动态 SQL 执行的上下文中对基础表应用权限,或者您可以使用EXECUTE AS OWNER.

于 2012-06-18T16:34:53.423 回答