我应该如何在这种情况下工作。我应该使用Trigger还是Leave on User来管理

时间:2009-12-14 15:14:06

标签: sql sql-server sql-server-2005

我正在创建一个应用程序,我在其中使用存储过程来实现我的逻辑。

现在我需要知道的是 - 我希望我的数据库不包含任何无效条目,为此我应该创建触发器,以实现我的数据验证逻辑,以便在更改FailPasswordAttemptCount时为了某些价值,那么我应该相应地通过触发器对相应列IsLocked进行更改,或者将其留在dba上进行管理。

例如

if FailPassowrdAttemptCount > 3
  IsCaptchaActivated=True
if FailPasswordAttemptCount>6
  IsLocked=true

现在,如果dba将FailPasswordAttemptCount的值更改为4而不将IsCaptchaActivated更改为true,那么这将为我的前端生成无效条目。 我应该通过触发器来管理它,还是应该将它留在dba上以便正确输入。

虽然这种类型的条目不可能通过前端但是如果any1有权访问数据库,则直接通过数据库进行更改。 为此,我应该将其留在用户身上,还是应该管理通过触发器。 我想让我的数据库在所有情况下都保持一致。

5 个答案:

答案 0 :(得分:2)

我不会使用触发器来做这样的事情。触发器是模糊的,可能很难为开发人员调试。使用表和存储过程来处理该问题。当你没有替代品时使用触发器。

答案 1 :(得分:2)

我会做以下事情:

  • 将数据验证逻辑放入存储过程
  • 使存储过程成为应用程序与表交互的唯一方式
  • 将您想要的代码放入存储过程。

随着应用程序的业务逻辑复杂性的增加,基于触发器的编程范例变得越来越难以编码和维护。

但是,如果您完全确定只有这样的简单逻辑,可以将其置于触发器中,因为这将需要对应用程序与数据库交互的方式进行最小的更改。

答案 2 :(得分:1)

我会使用两者的组合。我会尽量限制数据。并且将触发触发器,以便没有人可以插入任何无效的条目。

答案 3 :(得分:0)

对于这种情况,我可能不会使用触发器,仅针对您描述的情况。虽然我想知道为什么你有dba手动改变与你的应用程序的安全性密切相关的字段中的数据。

答案 4 :(得分:0)

我会在应用程序逻辑中实现它。调用登录sproc时,无论是否成功以及密码尝试失败次数以及是否需要验证码,都可以返回。无论DBA将3更改为4,您的代码都将看到4,忽略验证结果并向用户显示验证码。如果您担心DBA直接修改代码,您还可以检查APP_NAME()函数/变量以查看正在尝试修改数据的程序。它需要非常小心,但DBA直接修改字段也是如此。