我一直在這個問題上堅持了幾天 - 任何幫助,非常感謝。從服務器獲取Windows登錄名
我有一個SQL觸發器調用一個用C#編寫的DLL。在這個函數中,我需要發起啓動觸發器的SQL命令的人的Windows登錄名。無論我是否從C#或SQL獲取此信息都無關緊要。
不幸的是,大多數正常路線都失敗了。
內置SQL函數NT_CLIENT()僅適用於SQL登錄正在使用Windows身份驗證。
該DLL在服務器上運行,因此Environment.UserName與WindowsIdentity.GetCurrent()。Name無關,並且除非數據庫用戶(線程發起者)使用Windows身份驗證,否則返回空字符串。
我知道域名,IP地址和工作站名稱。從這裏我已經想出瞭如何在C#中獲取SID - 無論如何,我可以從使用C#的那些信息中獲取Windows登錄名,或者是否存在SQL內置函數,我錯過了?
編輯: 謝謝你讓我知道SQL是這個問題的一個啞巴。我們所擁有的是一個將每個人都作爲一個用戶登錄到數據庫的客戶端。我最終需要做的是做一個不安全的程序集,調用一個命令行函數WMIC。 Yucky的解決方案,但它完成了工作。再次感謝你提供的建議。 :)
'SELECT user'返回什麼? – CaffGeek 2010-03-03 16:33:01
我相信您需要將您的源應用程序中的信息作爲參數傳遞給您的服務器進程。我不確定你獲得的SID是什麼,我希望在Windows工作站有多個人登錄時,會有一個狀態,讓你可以返回多個SID(如果實際上可以)。 – Lazarus 2010-03-03 16:33:58
有時候更容易停止旋轉你的車輪,並從不同的角度來接近它。也許觸發器不是可行的解決方案。也許你只需要開始研究其他方法來完成你的解決方案。 – 2010-03-03 16:38:49