如何防止数据库用户通过触发器从所有表中删除数据

时间:2011-01-11 14:05:41

标签: sql sql-server sql-server-2005 sql-server-2008 triggers

嗨专家 如何阻止数据库用户使用触发器删除表中的任何数据? 我只想管理员从表中删除数据

由于

2 个答案:

答案 0 :(得分:7)

ü带走了用户的许可?如果你不想让他们做某事,那就“禁止”他们......这就是我们拥有权限的原因。

以下是有关如何撤消权限的详细信息:

http://msdn.microsoft.com/en-us/library/ms186308.aspx

答案 1 :(得分:6)

您想使用触发器的任何特殊原因?

您只需从要限制的用户中删除DELETE权限即可。请查看此处的“权限”部分:http://msdn.microsoft.com/en-us/library/ms189835.aspx

编辑:由于您说您确实想要使用触发器(但我认为您应该重新考虑),您可以创建一个表格,例如:

CREATE TABLE Restricted_Users 
(
  user_name VARCHAR(40) PRIMARY_KEY -- Use a size appropriate to your requirements
)

所有表上创建INSTEAD OF DELETE个触发器(这将是一件苦差事),它会检查USER_NAME()表中的Restricted_Users以及它们{ {1}}您可以调用EXIST以使事务回滚并向用户显示消息。

请记住,您必须在添加到数据库的所有新表上维护这些触发器,并在每次添加/删除数据库中的用户时维护RAISERROR表中的用户列表。

使用SQL Server中可用的权限系统(它的设计目的)使用具有为表设置的适当权限的角色会更简单很多。然后,在添加新用户时,您只需将它们分配给相应的角色,并为您处理删除权限。