我想在我的SQL Server 2012实例上设置一个“读取”用户。我想让他有权执行任何存储过程,函数或直接SQL语句,该语句从所有表和视图中检索数据,但不进行更新或插入(即,读取任何内容而不写入任何内容)。
我是否可以在不按名称专门授予每个函数或存储过程权限的情况下进行设置,而是授予他对任何函数或存储过程的执行权限,而只是取消修改表的权限?
如果我改为运行SQL Server 2008,会发生什么变化吗?
澄清和补充:
- 如果存储过程更改了数据,则用户应收到错误消息(拒绝修改或完全拒绝访问存储过程)。
- 如果潜在的解决方案涉及拒绝权限,我是否可以不授予某些权限而不是拒绝?
- 是否可以在一条语句中将拒绝应用于数据库中的所有表,视图等(现在和将来存在)?
我是新来的,请随时设置相应的标签,否则可以编辑问题
—
gt6989b 2014年
这就是@KrisGruttemeyer的想法-他可以执行它,但是会导致某种错误;或者,我可以拒绝执行他,只要我不必指定sp的列表即可,他有特权运行
—
gt6989b 2014年
在这种情况下,您需要阅读有关SQL Server权限的信息。有3种权限变体-
—
JNK 2014年
GRANT
授予权限,DENY
拒绝权限以及 REVOKE
删除GRANT
或DENY
。没有GRANT
或DENY
用户可以继承权限,例如从获得对存储过程的访问权限。
@ gt6989b如果您
—
JNK 2014年
DENY DELETE, INSERT, UPDATE
使用的是数据库或模式,我相信它只会影响表和视图。
@ gt6989b-仅注意这些注释中建议的答案被证明是不正确的。请参阅保罗·怀特的回应。
—
RLF 2014年