【发布时间】:2013-06-05 10:45:52
【问题描述】:
我有一个关于 ms sql 权限的问题
我为列 UPDATE 设置了 DENY 权限
DENY UPDATE ON [MyTable] (MyColumn) TO [PrincipalName] ;
它工作正常(防止在我直接更新 MyTable 的 MyColumn 时更新 MyColumn),但它仍然允许用户通过存储过程更新此列。
这个问题有解决办法吗?
【问题讨论】:
-
拒绝用户访问存储过程。 (请参阅Ownership Chains 了解为什么会发生这种情况)
-
但我不想拒绝执行存储过程,因为它会更新其他列,这是合法的。我只是想阻止某些用户(按应用程序角色)更新某些列(不是所有列)
-
即使没有所有权链接之类的东西并且检查了权限,这仍然不起作用,它会引发
UPDATE permission was denied错误。您需要一个单独的程序。 -
可惜T-SQL没有一个很简单的东西:防止以任何方式更新列(直接表更新或从sp)。
-
这不是它的工作原理。如果您对存储过程具有执行权限,那么您可以执行存储过程所做的任何事情,因为这样您可以拒绝对您喜欢的任何内容进行更新,并且存储过程充当数据的监护人,因为它是更新数据的唯一方法。如果您不希望用户能够使用存储过程,请不要授予他们访问权限。如果您希望某些用户不在存储过程中执行某些操作,那么您将不得不自己编写逻辑来执行此操作。
标签: sql tsql stored-procedures