簡體   English   中英

有什么方法可以確定對數據庫行的更新是由 Web 應用程序(php 進程)執行的,還是通過 DB GUI 手動運行的

[英]Is there any way to determine whether an update to a database row was performed by a web application (php process), or run by hand through a DB GUI

我需要允許通過數據庫 GUI 對我的審計系統進行編輯,以便它們也被跟蹤。 我正在使用 BEFORE 觸發器更新審計表,並且我希望能夠更改審計行以指示更新的來源是什么(通過現有的 'modified_by' 列)。

我無法為此向審計表添加額外的列,因為我希望能夠在不指定如下表列的情況下從更新的表復制到審計表(我不希望此觸發器要求我使用更改更新它到模式)。

我的觸發器:

BEGIN
    INSERT INTO contacts_audit SELECT * FROM contacts WHERE id = NEW.id;
END

偽觸發器:

BEGIN
    IF(GUI EDIT) THEN
        SET NEW.modified_by_id = 1; /* 1 is the administrator id */ 
    END IF;
    INSERT INTO contacts_audit SELECT * FROM contacts WHERE id = NEW.id; 
END

連接到數據庫的“DB GUI”是一個客戶端,一個 php 連接也是一個客戶端,與連接到數據庫的任何其他方式相同,所以沒有像“這是 php”這樣的標志。

但是,您可以在觸發器中使用 USER() 或 SESSION_USER() 函數來獲取當前連接的活動用戶/主機名,因此如果您想將它們分開,只需為 php 和 gui 使用不同的用戶/主機。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM