【发布时间】:2011-06-07 04:54:53
【问题描述】:
嗨专家 如何防止数据库用户使用触发器删除表中的任何数据? 我只想管理员从表中删除数据
谢谢
【问题讨论】:
标签: sql sql-server sql-server-2005 sql-server-2008 triggers
嗨专家 如何防止数据库用户使用触发器删除表中的任何数据? 我只想管理员从表中删除数据
谢谢
【问题讨论】:
标签: sql sql-server sql-server-2005 sql-server-2008 triggers
您想使用触发器有什么特别的原因吗?
您可以简单地从您要限制的用户中删除 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触发器(这将是一件苦差事),它检查Restricted_Users表中的USER_NAME(),如果它们EXIST你可以调用@ 987654328@ 使事务回滚并向用户显示消息。
请记住,您必须在添加到数据库的所有新表上维护这些触发器,并在您从数据库中添加/删除用户时维护Restricted_Users 表中的用户列表。
很多使用 SQL Server 中可用的权限系统(这是它的设计目的)使用为表设置了适当权限的角色会更简单。然后,在添加新用户时,您只需将他们分配给适当的角色,并为您处理删除权限。
【讨论】:
USER_NAME() 执行删除以了解您是否应该回滚操作。
sys.dm_exec_connections 来获取client_net_address,但这仅在您使用 TCP 连接到您的服务器时才有效(我思考)。这是该过程的 BOL 页面的链接:msdn.microsoft.com/en-us/library/ms181509.aspx
嗯,取消该用户的权限?如果您不希望他们做某事,请“禁止”他们这样做……这就是我们拥有权限的原因。
以下是有关如何撤销权限的详细信息:
【讨论】: