有没有办法找出提交SQL查询的用户?

时间:2010-03-25 19:38:33

标签: sql sql-server

我有兴趣编写一个触发器,它会忽略来自特定SQL用户的查询,但会对所有其他SQL用户采取操作。有没有办法做到这一点?

但请注意:用户需要进行一些查询,因此我需要允许一些查询/删除/等。

4 个答案:

答案 0 :(得分:3)

只需调整他们的权限,不要包括选择和其他任何你想阻止他们做的事情。

答案 1 :(得分:1)

如果你现在有一个你不想触发的触发器(我们在移动大量数据时在审计触发器上完成了这个),你可以在触发器的开头做一些事情:

if (suser_sname() = 'somename') return

如果你想为那个人做一些不同的事情,你会做类似的事情:

if (suser_sname() = 'somename) 
BEGIN
    some code
END
ELSE
BEGIN
    someother code
END

请注意几件事。请谨慎使用此代码 。首先,如果您可以通过安全权利做您需要的事情,那么这是一个更好的选择。将某人的姓名硬编码到触发器中可能会导致奇怪的结果,因为所有人都忘记了你把它放在那里。如果您需要在短期内完成(例如,在一段时间内将100,000,000,000条记录分批移动到数据库中而不会触及auidit触发器),那么在项目完成时不要忘记将其更改回来。您不希望永远不审计某人的行为,尤其是在您审计财务交易时。此外,在触发器中执行某些操作仅适用于插入/更新/删除。您无法阻止从触发器中进行选择。

答案 2 :(得分:0)

内置的USER功能如何:

If USER <> [your case]
Begin
  Do Stuff
End

答案 3 :(得分:0)

尝试使用:

 SELECT SUSER_NAME()

SUSER_NAME (Transact-SQL)