【发布时间】:2011-09-22 23:42:50
【问题描述】:
是否可以拒绝 SQL Server 中所有内容的权限(例如选择、插入等)并通过存储过程授予临时权限。我只想使用存储过程来访问 sql 数据库中的数据。
这是可能的还是有其他方法?
【问题讨论】:
标签: sql sql-server tsql permissions
是否可以拒绝 SQL Server 中所有内容的权限(例如选择、插入等)并通过存储过程授予临时权限。我只想使用存储过程来访问 sql 数据库中的数据。
这是可能的还是有其他方法?
【问题讨论】:
标签: sql sql-server tsql permissions
是的,这叫做ownership chaining,如果你授予proc执行权限,用户将能够执行proc并且它会工作,他会取回数据
如果他随后尝试从 SSMS 中的表中进行选择,它将不起作用(前提是他不是数据读取器或更高级别的角色)
请记住,动态 SQL 会中断 ownership chaining,如果您在存储过程中有动态 SQL,那么在这种情况下您将需要额外的权限
【讨论】:
这不仅适用于存储过程,也适用于视图。
通常,您可以授予用户对“更高级别”对象(如视图或存储过程)的权限,而不必同时授予用户对基础表的权限。
【讨论】:
这是我的 SQL Server 支持的一个很好的模式。
基本上,如果 proc 和表具有相同的所有者(通常是 dbo),则对存储过程具有权限的人根本不需要任何表权限。它叫ownership chaining
注意:在这种情况下根本不会检查表的权限,因此也会忽略显式的“拒绝权限”(拒绝与“无权限”不同)
这同样适用于视图、函数等(例如视图调用表、proc 调用视图……)
【讨论】: