【问题标题】:SQL Server : prevent updates to a table via user permissionsSQL Server:防止通过用户权限更新表
【发布时间】:2013-08-01 20:17:50
【问题描述】:

我从未在 SQL Server 中处理过用户/登录,因此很难掌握它。

我目前以管理员身份登录,这将我设置为“dbo”数据库用户。

我想阻止对一个特定的表进行更新。我尝试通过

更改权限
DENY UPDATE on SCHEMA::table TO dbo

但显然你不能乱用 dbo 用户的权限。

所以我创建了一个新用户 myuser 并通过 setuser myuser 切换,但该用户似乎没有权限从表中进行选择。

我应该如何向该用户授予“除了更新特定表之外的所有内容”权限?

【问题讨论】:

  • 你为什么要为dbo做这个?如果您只是想防止意外更新,您可以定义一个INSTEAD OF UPDATE 触发器,除了抛出错误之外什么都不做。这不是一项安全措施,因为任何拥有适当权限的人都可以禁用、更改或删除触发器。
  • 这不是一种安全措施,只是一种预防措施。我尝试了INSTEAD OF UPDATE,但它破坏了我的MERGE 语句。
  • 对了。是的,在这种情况下,出于某种原因,它坚持使用INSTEAD OF 触发其他两个动作。

标签: sql sql-server


【解决方案1】:

要授予“除了更新特定表之外的所有内容”权限,您可以这样做

EXEC sp_addrolemember N'db_datareader', N'myuser'

EXEC sp_addrolemember N'db_datawriter', N'myuser'

DENY UPDATE ON dbo.YourTable TO myuser

From BOL

db_datawriter 固定数据库角色的成员可以添加、删除或 更改所有用户表中的数据。

db_datareader 的成员已修复 数据库角色可以读取所有用户表中的所有数据。

【讨论】:

  • 在我切换到myuser 后,有什么方法可以切换回用户dbo?我尝试添加db_owner 权限,但setuser dbo 仍然失败。
  • 使用execute as代替setuser,然后调用revert切换回来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 2019-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多