使用 SQL 登录名的人是谁?

Mag*_*ier 5 authentication sql-server sql-server-2008-r2 users logins

是否可以找出谁使用了 SQL-Server 登录?

让我们假设我们怀疑有人滥用 SQL 登录名,该登录名本应由应用程序仅用于登录 SQL-Server。使用SQL登录的域用户是否记录在任何地方,以便我们得出谁使用它的结论?

Aar*_*and 7

不,如果用户使用 SQL 身份验证登录连接到 SQL Server,则无法确定由哪个 Windows 登录负责。SQL Server 只能记录它已经提供的信息,而在使用 SQL 身份验证时,不会将 Windows 登录/域/组信息传递给 SQL Server。

您可以查看类似的 DMVsys.dm_exec_sessionssys.dm_exec_connections获取其他支持信息,例如 IP 地址和主机名,但是:

  • 您只能向前执行此操作,除非您专门收集此信息(您现在可以使用服务器端跟踪、登录触发器、审计或扩展事件,或者。 ..)
  • 这仅在用户从其工作站直接连接到 SQL Server 时才有帮助。如果您的用户在数据中心使用跳转盒或对其他机器有共同访问权限,您将能够分辨出他们来自哪台机器,但无法分辨当时哪个 Windows 用户登录了该跳转盒。如果您确切地知道 SQL Server 中发生更改的时间,则可以将该时间与计算机上的日志相关联,以确定它是哪个用户。

您甚至无法阻止用户以此 SQL 身份验证登录身份进行连接,除非您将应用程序更改为使用 Windows 身份验证并完全禁用 SQL 身份验证。当然,您可以设置一个登录触发器来阻止登录,除非 host_name 和/或 program_name 在所需的一组值内,但这些东西很容易被欺骗,因此如果这种行为是恶意的,您的选择就非常有限。


Dan*_*her 3

您可以使用 DMV 查看当时登录的人员,但这不会为您提供任何历史信息。

SELECT c.session_id AS spid, c.auth_scheme, s.login_name,
       s.[host_name], c.client_net_address
FROM sys.dm_exec_connections AS c
INNER JOIN sys.dm_exec_sessions AS s ON c.session_id=s.session_id;
Run Code Online (Sandbox Code Playgroud)

我想您可以在登录触发器中使用此代码并将信息保存到表中,但如果您需要运行日志,您可能需要查看扩展事件或运行跟踪(SQL Server Profiler)。