2015-06-16 58 views
-3

我創建了一個包含vb.net的數據庫。用戶正在將記錄輸入系統並進行更新。有沒有辦法捕捉誰輸入或更新數據庫?SQL Server - 最後錄入記錄的用戶

例子:

LastModifiedBy | CreatedBy 
Joe Bob  | Sally Joe 
+0

當然有。問題是我們對你的架構一無所知。您提到了所使用的技術,SQL Server和VB.NET,但並未提及如何使用這些技術。例如,您是否使用與應用程序相同的連接字符串將用戶授權到數據庫,或者是通過映射到SQL Server用戶的域憑據登錄到SQL Server的用戶? –

+0

應用程序如何設計爲登錄到數據庫?你將Windows憑據傳遞給數據庫,還是你有一個通用用戶登錄到數據庫和獲取/設置數據? – Jeremy

回答

1

由於您使用的連接字符串中預定義的用戶名和密碼,你的選擇是僅限於.NET方面。通過數據庫,您可以訪問執行更新/插入/刪除的機器名稱,但不是用戶。 SYSTEM_USER將始終返回連接字符串中指定的帳戶。

如果您確實需要訪問運行您的應用的用戶的Windows用戶名,則需要更新您的VB.NET代碼以將其作爲參數傳遞給您的查詢並將其記錄在某個列中。這與歷史記錄表相結合,可以爲您提供有關誰正在更改數據的非常全面的信息(不包括通過SSMS進行的直接數據編輯)。

Environment.UserName屬性是你在找什麼,你可以找到更多here

+1

fyi current_user返回dbo如果它的系統管理員 –

+0

好消息,感謝@MichaelRudnerEvanchik,我將更新到SYSTEM_USER –

+0

hmmm ...看起來像它每次給系統管理員。我沒有通過.net登錄用戶。我只允許他們通過數據庫訪問。 .net只是一個可執行文件。如果他們有權訪問文件夾並訪問數據庫,他們可以使用該應用程序。 – user44565

-1
ALTER trigger [dbo].[audit_trigger] on [dbo].[table_name] for insert, update, delete 
as 
begin 

insert into audit(user,table,time_stamp) values (SYSTEM_USER,'table_name',getdate()) 
end 

或創建您的表中字段的用戶,並默認SYSTEM_USER

+4

如果應用程序使用同一用戶登錄,則此解決方案無用。 – Jeremy

+0

如果你的局域網用戶應該使用Windows身份驗證(不是每個人的硬編碼用戶),它會得到正確的用戶。你也沒有指定你正在做這樣的事情,所以這對於某些人 –

+1

是有用的,如果應用程序使用硬編碼憑證,所有用戶將顯示爲一個SQL Server,無論他們是否登錄到網絡上的計算機。 – Jeremy