2014-09-02 114 views
2

我的數據庫被配置爲使用SQL服務器認證,登錄名爲sa。現在我想知道用戶的Windows登錄用戶名是什麼。 SA將會爲大家提供。我能夠獲得計算機的IP地址和計算機名稱,但我迫切需要用戶的Windows登錄用戶名。我的網絡使用活動目錄btw進行設置。從sql server獲取windows用戶登錄名

set @UserComputerIP = CONVERT(varchar(20),CONNECTIONPROPERTY('client_net_address')) 
set @UserComputerName = CONVERT(varchar(20),HOST_NAME()) 

任何幫助,將不勝感激。 (詩篇。不,我不能在SQL Server切換到Windows身份驗證)

+3

只是爲了確保您知道:如果用戶是SA,他們不僅可以在整個數據庫實例上發送極端havok,而且可能會發送* server *本身。如果它們是以SQL Server用戶身份登錄的,則它們不會以Windows用戶身份登錄;根本沒有Windows憑據;所以你根本無法直接獲取這些信息。 – 2014-09-02 18:23:47

+1

**不要使用SA!**創建另一個管理員登錄名,您只能用於罕見需求 - 管理員事務,設置所有人使用Windows身份驗證,並將sa密碼放在某處的保險箱中。 – 2014-09-02 20:04:12

+0

爲什麼你會想象你能在這種情況下獲得Windows登錄?考慮到SA訪問您的整個用戶羣,我會重新考慮。 – 2014-09-02 20:05:24

回答

0

做你試試下面的命令會給你NT ID

SELECT CONVERT(varchar(20),suser_sname()) 
+1

yes ..試過這些命令..給'sa' – Maverick1415 2014-09-02 17:31:44

+0

你應該在你的數據庫連接中使用可信連接字符串。 – Hiten004 2014-09-02 17:35:17

1

我不知道,如果你可以,如果你獲得的域用戶名沒有使用Windows身份驗證。

我知道的最詳細的信息是系統表/視圖,如果您使用SQL登錄進行連接,那麼這些信息不會顯示NT用戶名。即使服務器處於混合身份驗證模式。

在-SQL預Server 2008中:

select nt_username from master.sys.sysprocesses where spid = @@spid 

從SQL Server 2008上:

select nt_user_name from sys.dm_exec_sessions where session_id = @@spid 

雙方將顯示一個空列,如果你連接使用SQL身份驗證。

+0

結果空回來了。它可能不可能。 – Maverick1415 2014-09-02 20:22:00

+0

是的,我在我的服務器上也試過,並且該列僅適用於與Windows身份驗證的連接。如果您使用的是客戶端應用程序,也許您可​​以對其進行編碼,獲取用戶名,然後將其傳遞給服務器? – Luc 2014-09-03 00:43:52