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

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.

  • 不,更新和删除指的是表中的数据,而不是数据本身。你可以随时尝试这个。是的,我发布了一个示例,您可以在其中影响架构而不是每个对象(如果您稍后添加表,这会很有帮助,权限是继承的,除非您想添加用户*无权*访问的表,那么您需要在该表上明确拒绝)。 (2认同)