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

Ari*_*ian 0 sql sql-server triggers sql-server-2005 sql-server-2008

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

谢谢

Jak*_*kub 7

嗯带走了用户的许可?如果你不希望他们做某事,那就"禁止"他们......这就是我们拥有权限的原因.

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

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


Ton*_*ony 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
)
Run Code Online (Sandbox Code Playgroud)

创建INSTEAD OF DELETE于触发所有的表(那将是件苦差事),它会检查USER_NAME()Restricted_Users表中,如果他们EXIST可以打电话RAISERROR到导致事务回滚,并显示一条消息给用户.

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

这将是很多简单的使用可允许系统在SQL Server(这就是它的设计),所用的表格设置相应的权限角色.然后,在添加新用户时,您只需将它们分配给相应的角色,并为您处理删除权限.