如何允许 SQL Server 用户插入/更新/删除数据,但不能更改架构?

问题描述 投票:0回答:2

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

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

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

使用 SQL Server 2008 R2 和 SSMS。

c#-4.0 sql-server-2008-r2 user-roles
2个回答
63
投票

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

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


0
投票

在我的情况下,我无法删除 asp net 用户,因为我正在添加触发器,第一个设置删除触发器,并且我以 Windows 身份验证登录到 SSMS,并且我可以删除和更新数据。

© www.soinside.com 2019 - 2024. All rights reserved.