【问题标题】:SQL Server - Restrict UPDATE to specific columnsSQL Server - 将更新限制为特定列
【发布时间】:2016-01-29 13:02:49
【问题描述】:

美好的一天。我解释我的情况。有两个用户(user1 和 user2)。我在 SQL Server 中有一个表(tblTest),有 3 列(f1、f2、f3)。我想做的是:

  1. 拒绝 UPDATE 到列 f2 并为 user1 授予 UPDATE 到列 f1 和 f3。

  2. UPDATE 授予f2 列,拒绝UPDATE 授予user2 的f1 和f3 列。

目前我被困在第 1 步)。

这就是我所做的:

在 SQL Server 中,我选择了tblTest => Properties => Permissions,选择了 user1。

在底部的“用户 1 的权限”中 => 更新然后“列权限”按钮,选中拒绝 f2 和授予 f1 和 f3。

然后我使用user1 的凭据访问 SQL Server,并尝试更新此表中的一行。

显然命令失败并显示此消息:

对象“tblTest”、数据库“dbremarksSQL”、模式“dbo”的列“f2”的更新权限被拒绝。

到目前为止一切正常。我的问题是其他列也没有更新。我希望 update 命令至少更新 f1 和 f3 列,并拒绝仅对 f2 进行更新(保持原样)。

这可能吗?

谢谢

顺便说一句,我使用 SQL Server 2014 Management Studio。

【问题讨论】:

  • 您是否尝试在单个 UPDATE 语句中更新多个列(包括 tblTest.f2),然后您希望 f2 未更新,但其他列已更新?这不是 SQL Server 的工作方式 - 如果您执行由于缺少权限而失败的语句,则该语句的 nothing 将被执行!如果您想将其他列更新为User1 - 使用适当的UPDATE 语句没有提及f2 列!
  • 很好!我接到你了。感谢您的澄清。然后在这种情况下,我想我不能在我未来的 vb.net 程序中使用以下指令: MyDatabaseBindingSource.EndEdit() MyDatabaseTableAdapter.Update(MyDataSet.tblTest) 因为它是一个单一的 UPDATE 语句。我对么?信息:上述场景是一个故障排除,以了解为什么这个 MyDatabaseTableAdapter.Update(MyDataSet.tblTest) 不能产生相同的效果。

标签: sql-server sql-update user-permissions restrict


【解决方案1】:

你可以这样试试:

GRANT UPDATE ON dbo.tblTest(f1,f3) TO user1;
DENY UPDATE ON dbo.tblTest(f2 ) TO user1;

【讨论】:

  • 我试过了。但结果与来自服务器的相同消息相同。 f1 和 f3 列未更新。
  • @LukeLuke:- 你检查过你的专栏有更新权限吗?看起来您也为 f1 和 f3 设置了拒绝更新权限。
【解决方案2】:

你试过了吗:

grant update(column-name) on table-name to user-name

字体:Grant alter on only one column in table

【讨论】:

  • 我试过了。但结果与来自服务器的相同消息相同。 f1 和 f3 列未更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
  • 2011-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多