我目前正在为大学课程的订单管理系统中的客户创建表格。该系统依赖于能够为客户检索订单历史。由于我们选择不将它们存储在单独的表中,因此删除从客户表中删除行的选项至关重要。
我如何以及在哪里在CREATE声明中设置它?我怀疑我必须创建一个关于应该发生什么的规则,但我不完全确定具体细节。
在 SQL Server 上,您有以下选项:
DENY DELETE ON OBJECT::dbo.Customer TO db_datawriter;CREATE TRIGGER nodelete1 ON dbo.Customer INSTEAD OF DELETE AS RAISERROR('You can''t delete from this table', 16, 10)然而,以我诚实的观点,我认为这应该在应用程序级别而不是数据库级别解决。即使使用上述技术,什么会阻止某人在删除记录之前简单地删除触发器或授予必要的权限?或者干脆删除整个表?
如果您不希望用户从表中删除记录,只需确保您的应用程序不允许他们这样做。任何直接使用数据库的人都应该知道发出 DELETE 语句可能很危险 - 特别是如果您没有备份。
如果仅通过应用程序访问表,则可以使用软删除,例如向表中添加一列,IsDeleted然后在软件中检查该行以查看该行是活动的还是已删除。
如果最终用户可以访问数据库,您可以更改他/她的登录名或组权限以删除对该表的删除授权。
| 归档时间: |
|
| 查看次数: |
11047 次 |
| 最近记录: |