Sql server SQLServer2008ManagementStudio中的触发器

Sql server SQLServer2008ManagementStudio中的触发器,sql-server,Sql Server,我试图设置触发器,使其在管理员(而非用户)对数据库进行任何更改时,所有具有管理员名称和时间的更改数据都保存在已创建的审核表中,该表包含所有可能的字段 我已经在每个表上为这些表中的任何更新创建了触发器。触发器将信息保存在audittable中。但是,我只想限制管理员执行此操作。就像我只想记录管理员所做的更改,包括他们的姓名、时间和他们所做的更改一样,我有一个单独的表格,用于记录管理员的姓名、用户名、密码等等 谁能帮我一下吗。 感谢获得您可能使用的用户: 服务器级登录 选择系统用户、用户名称、用户s

我试图设置触发器,使其在管理员(而非用户)对数据库进行任何更改时,所有具有管理员名称和时间的更改数据都保存在已创建的审核表中,该表包含所有可能的字段

我已经在每个表上为这些表中的任何更新创建了触发器。触发器将信息保存在audittable中。但是,我只想限制管理员执行此操作。就像我只想记录管理员所做的更改,包括他们的姓名、时间和他们所做的更改一样,我有一个单独的表格,用于记录管理员的姓名、用户名、密码等等

谁能帮我一下吗。
感谢获得您可能使用的用户:

服务器级登录

选择系统用户、用户名称、用户sid

数据库级数据库用户

选择会话用户、当前用户、用户、用户名、用户id


然后在附加表中检查此用户是否为管理员。

要获取您可以使用的用户:

服务器级登录

选择系统用户、用户名称、用户sid

数据库级数据库用户

选择会话用户、当前用户、用户、用户名、用户id


然后检查该用户是否为该附加表中的管理员。

您可以尝试这两个功能之一,具体取决于您定义为管理员的功能

SELECT IS_MEMBER('dbo'), IS_SRVROLEMEMBER('sysadmin')
IS_MEMBER函数评估数据库角色,IS_SRVROLEMEMBER评估服务器角色。因此,如果您想知道用户是否是数据库管理员,您可以使用is_成员。这些将适用于用户定义的角色以及内置角色

更新:

下面是一个触发器示例,当服务器管理员向审核表插入数据时,该触发器将向审核表添加数据

CREATE TRIGGER trg_InfoUpdates ON tblCustomerInfo 
FOR INSERT AS

    IF IS_SRVROLEMEMBER('sysadmin') = 1
      BEGIN
        INSERT INTO tblAuditLog (CustomerID)
        SELECT CustomerID
        FROM inserted
      END
    ;

您可以尝试这两个功能之一,具体取决于您作为管理员的定义

SELECT IS_MEMBER('dbo'), IS_SRVROLEMEMBER('sysadmin')
IS_MEMBER函数评估数据库角色,IS_SRVROLEMEMBER评估服务器角色。因此,如果您想知道用户是否是数据库管理员,您可以使用is_成员。这些将适用于用户定义的角色以及内置角色

更新:

下面是一个触发器示例,当服务器管理员向审核表插入数据时,该触发器将向审核表添加数据

CREATE TRIGGER trg_InfoUpdates ON tblCustomerInfo 
FOR INSERT AS

    IF IS_SRVROLEMEMBER('sysadmin') = 1
      BEGIN
        INSERT INTO tblAuditLog (CustomerID)
        SELECT CustomerID
        FROM inserted
      END
    ;

所以现在管理员想要在不留下审计线索的情况下进行更改,它所要做的就是模拟一个非管理员用户?管理员将始终能够模拟非管理员用户。。。我一点也不认为你的审计是安全可靠的。所以现在管理员想要在不留下审计线索的情况下进行更改,它所要做的就是模拟一个非管理员用户?管理员将始终能够模拟非管理员用户。。。我一点也不认为你的审计是安全可靠的。好吧,但我该如何实施呢。例如,假设我们对任何用户进行的任何类型的更新都有这样的功能:在tblCustomerInfo上创建触发器trg_InfoUpdates,作为DECLARE@CustomerID int SELECT@CustomerID=SELECT CustomerID FROM tblCustomerInfo BEGIN INSERT INTO tblAuditLog CustomerID Values@CustomerID END现在我如何实现IS_SRVROLEMEMEBER来实现保持管理员变更的目标是什么?我在回答中添加了一个例子。请注意,当一次插入多行时,触发器将出现问题,因为@CustomerID变量只保存一个更改。此外,插入的表包含在此事务期间插入的行。因此,您不必在触发器中查询tblCustomerInfo表。还有一个被删除的表,它对UDPATES和DELETES很有用。好的,但是我如何实现它呢。例如,假设我们对任何用户进行的任何类型的更新都有这样的功能:在tblCustomerInfo上创建触发器trg_InfoUpdates,作为DECLARE@CustomerID int SELECT@CustomerID=SELECT CustomerID FROM tblCustomerInfo BEGIN INSERT INTO tblAuditLog CustomerID Values@CustomerID END现在我如何实现IS_SRVROLEMEMEBER来实现保持管理员变更的目标是什么?我在回答中添加了一个例子。请注意,当一次插入多行时,触发器将出现问题,因为@CustomerID变量只保存一个更改。此外,插入的表包含在此事务期间插入的行。因此,您不必在触发器中查询tblCustomerInfo表。还有一个已删除的表,它对UDPATE和DELETE非常有用。