【问题标题】:creating an instead of trigger to allow certain users the ability to modify table创建一个代替触发器以允许某些用户能够修改表
【发布时间】:2015-11-02 03:58:32
【问题描述】:

我使用的是 SQL Server 2012。

我正在尝试编写我的第一个触发器。

我有两张表,一张名为 tblPayroll,另一张名为 tblAllowedUsers。下面是它们的外观的快速视图,

 tblPayroll                                    tblAllowedUsers

 employee  salary  position  hr person         hr person    host_name
 abc       5       manager   Sally             Sally        EXABC456
 jkl       3       admin     Dave              Dave         EXDFG908
 plk       4       admin     Sally
 ppp       8       admin     Natalie
 lmn       3       manager   Dave

所以在我的示例中有 3 个用户,Sally、Dave 和 Natalie。 Natalie 虽然是唯一不在 tblAllowedUsers 表中的人。

所以我希望 tblAllowedUsers 表中的任何人都能够修改、插入或删除 tblPayroll 表中的任何记录。

对于不在 tblAllowedUsers 表中的人(即 Natalie),尽管我不希望他们能够修改、插入或删除员工是 tblPayroll 表中经理的记录。

在这种情况下使用的不是触发器是正确的触发器吗?我知道在我的触发器中我需要使用 HOST_NAME() 函数来查看哪个用户正在执行语句。

我相信我的触发器的外壳应该如下所示,

create trigger trDefaultPath on MatlabSearchPath
instead of insert, update, delete
as
begin

end

在中间部分我需要类似下面的东西,

if postion = 'manager'   -- need to check who is running this

    if HOST_NAME() IN tblAllowedUsers
        -- then execute the statement
    else
        -- give an error message
    end
else
  -- then execute the statement
end

【问题讨论】:

  • 不要使用触发器。 hr 人员是否有不同的 SQL 用户(不是主机、用户)?
  • 他们拥有相同的用户。如果没有触发器,您将如何实现这一目标?
  • 是的,他们应该有不同的用户,你可以限制用户使用/修改表。
  • 可以使用triger,但我建议您应该从tblPayroll 表中创建一个视图,并对其进行触发。请参阅此处:technet.microsoft.com/en-us/library/…
  • 那你有一个大问题。理想的解决方案是按照@PeterRing 所说的那样做。那是因为它将避免启动时潜在的安全问题:“什么会阻止用户在 tblAllowedUsers 上插入/更新”或什么会阻止用户(因为它是相同的)更改触发器本身。数据库角色系统是为此目的创建的,您应该使用它或解释您的公司为什么要使用它。

标签: sql sql-server triggers sql-server-2012


【解决方案1】:

如果人们共享用户 ID,则没有可靠的方法来保护数据。 Host_name 是一个客户端参数,即使对于那些技术知识有限的人来说也很容易被欺骗。您的公司是否愿意冒着修改人力资源/工资数据的风险,而您却无法判断到底是谁做的?无论谁对这个问题说“是”,请确保以书面或电子邮件的形式收到并永久保留。

从您的回复看来,您可能对可用登录次数有一些限制,并且您希望拥有的用户多于您的登录次数,但用户具有不同的角色和权限。如果您确实必须共享登录名,建议您指定一个用于 READ/WRITE,另一个用于 READ。这样,您只与授权 RW 的用户共享 RW 的登录名/密码,并为只允许阅读的用户共享 R-only 登录名/密码。从安全的角度来看,这仍然是一个糟糕的设置,但至少现在确保用户只能做他们被允许做的事情的责任被传回给了用户。

仍然确保有人在电子邮件中回复说可以部署这种非常糟糕的安全模型,尽管您警告过它的风险并建议不要这样做。

【讨论】:

    猜你喜欢
    • 2011-02-16
    • 2013-04-06
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多