Sql-Server

誰是使用 SQL 登錄的人?

  • January 27, 2016

是否可以找出誰使用了 SQL-Server 登錄名?

假設我們懷疑有人濫用了本應由應用程序僅用於登錄 SQL-Server 的 SQL 登錄名。使用 SQL 登錄的域使用者是否在任何地方登錄,以便我們可以得出誰使用了它的結論?

您可以使用 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;

我想您可以在登錄觸發器中使用此程式碼並將資訊保存到表中,但如果您需要執行日誌,您可能需要查看擴展事件或執行跟踪(SQL Server Profiler)。

不,如果使用者使用 SQL 身份驗證登錄連接到 SQL Server,則無法確定是哪個 Windows 登錄負責。SQL Server 只能記錄它已經提供的資訊,並且當您使用 SQL 身份驗證時,不會將任何 Windows 登錄/域/組資訊傳遞給 SQL Server。

您可以查看 DMV 之類的sys.dm_exec_sessionssys.dm_exec_connections獲取其他支持資訊,例如 IP 地址和主機名,但是:

  • 您只能在以後執行此操作,除非您專門收集此資訊(您現在可以使用伺服器端跟踪、登錄觸發器、審核或擴展事件,或者。 ..)
  • 只有當使用者從他們的工作站直接連接到 SQL Server 時,這才會有所幫助。如果您的使用者使用數據中心中的跳轉框或對其他機器具有共同訪問權限,您將能夠知道他們來自哪台機器,但不能知道當時哪個 Windows 使用者登錄到該框。如果您確切知道更改發生在 SQL Server 中的時間,則可以將該時間與機器上的日誌相關聯,以確定它是哪個使用者。

除非您將應用程序更改為使用 Windows 身份驗證並完全禁用 SQL 身份驗證,否則您甚至無法阻止使用者以此 SQL 身份驗證登錄名進行連接。當然,您可以設置一個登錄觸發器來阻止登錄,除非 host_name 和/或 program_name 在所需的一組值內,但是這些東西很容易被欺騙,所以如果這種行為是惡意的,那麼您的選擇就非常有限。

引用自:https://dba.stackexchange.com/questions/127477