我想阻止在我的数据库中写入ceartain字段的UPDATE查询。我还想在某些表上防止任何类型的UPDATE或DELETE查询,因为这些表包含需要无限期持久化的永久信息。
这些配置可以在SQL Server Management Studio中实现吗?
答案 0 :(得分:8)
为了防止某些字段的更新,您可能必须在该表上有一个AFTER UPDATE触发器,用于检查是否有任何“只读”字段即将更新;如果是,则中止交易。
CREATE TRIGGER triggerName
ON dbo.YourTable AFTER UPDATE
AS
IF UPDATE(somefield)
ROLLBACK TRANSACTION
要防止某些用户访问某些表,只是不要授予这些用户(或他们所属的数据库角色)对这些表的UPDATE和/或DELETE权限。
答案 1 :(得分:4)
删除只读表的所有权限。没有人可以做出改变
考虑存储过程或视图来控制写入,再次删除直接权限
请参阅marc_s answer
如果您的用户以dbo或sa连接,那么您无法做任何有效的事情。用户可以禁用trigegrs或删除它们。无论如何都不会检查sa权限。
答案 2 :(得分:1)
@marc_s是正确的,如果你想阻止某些字段的更改,你应该使用触发器或限制用户的权限,如果你是dba。在任何情况下,我都会使用INSTEAD OF触发器而不是AFTER触发器,因此没有必要回滚事务。
CREATE TRIGGER triggerName
ON dbo.YourTable INSTEAD OF UPDATE, INSERT
AS
IF UPDATE(somefield)
-- do nothing or whatever
在任何情况下,如果你发现这个答案是正确的,请接受@marc_s提供的答案,这只是答案的一部分