【问题标题】:T-SQL deny column update even from stored procedureT-SQL 即使从存储过程也拒绝列更新
【发布时间】: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


【解决方案1】:

科林·麦凯是对的。存储过程封装了业务逻辑和权限。

你可以使用类似的东西

IF user_name()='PrincipalName' raiserror(N'Update denied',15,0)

在存储过程中检查用户。或者您可以为 then 表创建更新触发器

【讨论】:

    猜你喜欢
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 2013-05-28
    • 2018-02-03
    • 2021-10-31
    • 1970-01-01
    • 2011-08-03
    相关资源
    最近更新 更多