我想實現審計表,但我不知道如何獲取用戶名。獲取審計表的應用程序用戶名
我正在使用C#和Sql Server。我在我的數據庫中有一個用戶表。當我登錄我的Windows窗體應用程序時,我驗證是否使用了正確的用戶名和密碼組合。但是,我如何通知當前用戶的數據庫?我想添加一個額外的列到我的用戶表,在其中設置1登錄的用戶名。這是單用戶解決方案嗎?但我的應用程序應該支持多用戶。在這種情況下可以做些什麼?
我想實現審計表,但我不知道如何獲取用戶名。獲取審計表的應用程序用戶名
我正在使用C#和Sql Server。我在我的數據庫中有一個用戶表。當我登錄我的Windows窗體應用程序時,我驗證是否使用了正確的用戶名和密碼組合。但是,我如何通知當前用戶的數據庫?我想添加一個額外的列到我的用戶表,在其中設置1登錄的用戶名。這是單用戶解決方案嗎?但我的應用程序應該支持多用戶。在這種情況下可以做些什麼?
DECLARE @username varchar(128)
SET @username = CONVERT(VarChar(128), CONTEXT_INFO());
PRINT @username
DECLARE @ID_User int
SET @ID_User = (SELECT Users.ID_User
FROM Users
WHERE [email protected])
PRINT @ID_User
這就是我解決它的方法。我在每個更新觸發器中插入了這段代碼。
根據您的身份驗證方案,您需要獲取用戶名。
厚客戶端應用程序,
Environment.Username
和
System.Security.Principal.WindowsIdentity.GetCurrent()
是一對情侶的選擇。
通常用於審計表,有一個名爲'ModifiedByUser'的列,您可以在其中記錄win表單應用程序提供的用戶名。
當你說認證方案你的意思是NTLM或Kerberos? (我剛剛發現這些在sql-server上使用)。您能否提供一個關於ModifiedByUser列如何工作的例子,或者您能否更具體一些? (審計表也是由我創建的。) –
更新了答案 –
感謝您的更新。這適用於Windows用戶帳戶。但對於特定於應用程序的用戶(存儲在數據庫表中),可以做些什麼? –
SQL Server知道你是誰。您可以簡單地使用SUSER_SNAME()
或/和ORIGINAL_LOGIN()
函數作爲審計表中用戶名列的默認值。審覈事件發生時間一樣,使用GetDate()
函數。沒有必要從客戶端發送這些信息。
這是一個非常開放的問題,但我想我明白你在做什麼。您具有在Users表中定義的特定於應用程序的用戶(與使用數據庫用戶或活動目錄用戶相反),並且需要記錄特定信息以用於審計或基於登錄驅動安全性。那是對的嗎?
這可以完成,但它的邏輯將需要寫入您的應用程序。
讓我們假裝我們正在編寫一個程序向客戶發送發票。 我使用了基於角色的安全性,您可以通過授予用戶角色來授予用戶執行特定任務的權限。例如,「創建新發票」可能是一個角色。我通常有這2個表:
拳頭表,安全角色定義將有一個ID列,則說明(「創建新發票」),而且我通常有一個審計列來指示是否需要爲審計記錄此操作。
第二張表SecurityRole用戶是我定義用戶是否有權執行該角色的地方。列通常是這樣的:一個唯一的ID,用戶ID(外鍵用戶表),角色ID(外鍵SecurityRoleDefintion)
現在,在您的應用程序,我們需要一個類來檢查用戶有一個角色。它需要考慮角色ID(或名稱)和用戶ID。示例:public bool IsUserAuthorized(int RoleID, int UserID)
此方法可以在您的SecurityRoleUsers表上運行查詢,以查看用戶是否在該角色的表中。如果是這樣,它將返回true。如果不是,則返回false。
現在回到應用程序中,當用戶點擊「Create New Invoice」按鈕時,它會運行IsUserAuthorized()方法來檢查用戶是否可以執行該操作。
如果創建審計日誌是必要的,你可以做類似的事情。在爲「創建新發票」完成安全檢查後,您可以檢查角色是否需要審覈記錄,如果是,則寫入審覈表。
我確實有這些表,並且我已經實現了檢查用戶權限的功能。我的問題是如何將當前用戶名傳遞給我的審計表,對於多用戶應用程序。它看起來CONTEXT_INFO工程(當前用戶名被插入),但因爲我沒有安裝在多個設備上的應用程序,我不知道它將如何表現。 –
您的用戶是Windows/AD用戶帳戶嗎?或者是特定於應用程序的用戶(即在數據庫中的用戶表中定義的或者這些行中的某個用戶)? 您使用什麼驗證方法連接到數據庫?您是使用Windows身份驗證還是您有特定的數據庫用戶/密碼組合? –
他們是應用程序特定的用戶,我想我想要的是一個特定的數據庫用戶/密碼組合.. –