我的应用程序(C#、ASP.Net)需要在数据库中插入、更新和删除数据,并运行存储过程。我需要防止它修改数据库架构 - 不更改表、创建或删除、不更改存储过程。
我需要向应用程序用户授予什么权限组合? 仅“选择”是行不通的,因为它需要在表中插入/更新/删除数据。
如何检查特定登录的权限和访问权限? 如何授予或拒绝登录权限和访问权限? 我需要授予新用户(登录名)仅访问一个数据库的权限。
使用 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;
理想情况下,您不允许对表进行临时 DML,并通过存储过程控制所有 DML。在这种情况下,您只需要对过程本身授予 exec 权限,而不是对其涉及的对象授予 exec 权限:
GRANT EXEC ON dbo.procedure TO user;
同样,如果您想允许对特定模式中的所有过程执行 exec,您可以说:
GRANT EXEC ON SCHEMA::dbo TO user;
一个例外是存储过程组成动态 SQL 时。在这些情况下,您可能仍然需要在动态 SQL 执行的上下文中对基础表应用权限,或者您可以使用
EXECUTE AS OWNER
。
在我的情况下,我无法删除 asp net 用户,因为我正在添加触发器,第一个设置删除触发器,并且我以 Windows 身份验证登录到 SSMS,并且我可以删除和更新数据。