首先,我是一名安全人員,而不是開發人員。如果有更簡單的方法去做我想做的事情,我不會感到驚訝。這是我第一次用C#做任何事情,所以要溫和。是否可以在一箇中運行2個獨立的INSERT語句?
我正在研究數據庫以跟蹤我們對審計控制的遵從性。該數據庫是MS SQL 2008,具有我在C#中編寫的Web應用程序前端。我正在研究一個頁面,該頁面允許用戶使用測試結果更新控件或更改需求或幾乎其他任何內容。在此頁面上更新信息時,我正試圖在控制表中更新記錄之前將現有數據從控制表寫入歷史記錄表。我也試圖登錄(在History
表中)誰進行了更新和何時。這是我遇到問題的地方。我可以在INSERT
語句中嵌入SELECT
語句來拉取數據,但我無法弄清楚如何添加更新的日期和時間以及更新它的用戶。
這是我目前的查詢,不起作用的原因很明顯。這樣你就可以知道我正在使用哪些列和參數。
INSERT INTO History (BUName, ControlFWName, ControlID, ControlDesc,
TestPlan, TestFreq, NextTest, ControlCatName,
AuditorNotes, AuditorNoteTime, TestResults, ArtifactID1,
ArtifactID2, ArtifactID3, ArtifactID4,
WhoChanged, WhenChanged)
SELECT BUName, ControlFWName, ControlID, ControlDesc,
TestPlan, TestFreq, NextTest, ControlCatName,
AuditorNotes, AuditorNoteTime, TestResults, ArtifactID1,
ArtifactID2, ArtifactID3, ArtifactID4
FROM Controls
WHERE BUName = @BUName
AND ControlFWName = @ControlFWName
AND ControlID = @ControlID
如何追加WhoChanged
和WhenChanged
列於insert語句?它們被參數化爲只有DateTime.Now
和User.Identity.Name
的變量。
如果您需要更多的代碼,請告訴我。
我曾考慮將列添加到控件表中,但我試圖遠離它。我一直在閱讀有關SQL Server中的計算列。當添加記錄時,是否有可能讓SQL服務器捕獲時間戳和用戶名? – Edward
只要您使用受信任的身份驗證進行數據連接,並且您的所有Kerberos資料都進行了適當的配置,這當然是可能的。 Web應用程序常常在服務帳戶的上下文中運行,因此您無需爲用戶提供數據庫權限。由你決定。 SQL中至少有4個不同的「當前用戶」函數,我不記得哪一個是正確的。 – Bill