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

30

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

我需要授予应用程序用户什么样的权限组合?仅“select”无法使用,因为它需要在表中插入/更新/删除数据。

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

使用SQL Server 2008 R2和SSMS。

1个回答

59

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

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


授予“更新”和“删除”权限是否允许该用户更改和删除表?此外,我可以授予模式权限而不是每个表的权限吗? - jprusakova
2
不,更新和删除是指表中的数据,而不是数据本身。你可以随时尝试这个。是的,我发布了一个示例,您可以影响模式而不是每个对象(如果您稍后添加表格,则可以帮助继承权限,除非您想添加用户*无法访问的表格,那么您需要在该表格上明确拒绝)。 - Aaron Bertrand
如何在SSMS或脚本中检查和修改登录权限?对于这个有限访问的新用户,我应该选择哪个服务器角色? - jprusakova
抱歉,我目前没有任何相关信息。我建议您使用谷歌或必应搜索,您也可以这样做。 :-) - Aaron Bertrand
我正在搜索、阅读并尝试弄清楚。Stackoverflow的答案和评论非常有帮助,还有其他在线资源。 - jprusakova
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接