MySQL trigger

Dear all,

right now try to log down which application user change the record of a table, therefore I setup the table trigger for it.

CREATE  TRIGGER `WebHynet`.`tblPCCostItem_BDTRIGGER` 
BEFORE DELETE ON
 WebHynet.tblPCCostItem 
FOR EACH ROW
BEGIN 
INSERT INTO WebHynet_DataAudit.`tblPCCostItem` SET 
TriggerAction="BEFORE",
ActionDone="DELETE",
Action_AuditDate=now(),
ActionBy_Audit=USER() , 

`ID`=OLD.`ID`, `ReqDetailID`=OLD.`ReqDetailID`, `BudgetItemID`=OLD.`BudgetItemID`, `SignedCo`=OLD.`SignedCo`, `PrevID`=OLD.`PrevID`, `VendorType`=OLD.`VendorType`, `VendorCode`=OLD.`VendorCode`, `SRNum`=OLD.`SRNum`, `ProjectNum`=OLD.`ProjectNum`, `CostType`=OLD.`CostType`, `CostCat`=OLD.`CostCat`, `CostSubcat`=OLD.`CostSubcat`, `ReachCost`=OLD.`ReachCost`, `POFlag`=OLD.`POFlag`, `PONum`=OLD.`PONum`, `POLineNum`=OLD.`POLineNum`, `POMatchQty`=OLD.`POMatchQty`, `LISPONum`=OLD.`LISPONum`, `PODate`=OLD.`PODate`, `VendorContact`=OLD.`VendorContact`, `ItemCode`=OLD.`ItemCode`, `Description`=OLD.`Description`, `UOM`=OLD.`UOM`, `Currency`=OLD.`Currency`, `UnitCost`=OLD.`UnitCost`, `Quantity`=OLD.`Quantity`, `USDAmount`=OLD.`USDAmount`, `USDMonthlyCost`=OLD.`USDMonthlyCost`, `EvergreenFlag`=OLD.`EvergreenFlag`, `BillingPeriod`=OLD.`BillingPeriod`, `TermNoticeDay`=OLD.`TermNoticeDay`, `ReadyDate`=OLD.`ReadyDate`, `StartDate`=OLD.`StartDate`, `EndDate`=OLD.`EndDate`, `PopID`=OLD.`PopID`, `AendAddr`=OLD.`AendAddr`, `BendAddr`=OLD.`BendAddr`, `GLCode`=OLD.`GLCode`, `CCC`=OLD.`CCC`, `WONum`=OLD.`WONum`, `FirstReceiveQty`=OLD.`FirstReceiveQty`, `TotalReceiveQty`=OLD.`TotalReceiveQty`, `FirstReceiveDate`=OLD.`FirstReceiveDate`, `NextReceiveDate`=OLD.`NextReceiveDate`, `VendorDocNum`=OLD.`VendorDocNum`, `VendorCircuitID`=OLD.`VendorCircuitID`, `ItemStatus`=OLD.`ItemStatus`, `OccupyFlag`=OLD.`OccupyFlag`, `RequestUser`=OLD.`RequestUser`, `CreateUser`=OLD.`CreateUser`, `CreateDate`=OLD.`CreateDate`, `LastUpdUser`=OLD.`LastUpdUser`, `LastUpdDate`=OLD.`LastUpdDate`, `Nomenclate`=OLD.`Nomenclate`, `PCCWGServiceID`=OLD.`PCCWGServiceID`, `TermDate`=OLD.`TermDate`, `Make`=OLD.`Make`, `ModelNum`=OLD.`ModelNum`, `PartNum`=OLD.`PartNum`, `SerialNum`=OLD.`SerialNum`, `PrevID_TermDate`=OLD.`PrevID_TermDate`, `TermReqID`=OLD.`TermReqID`, `Attachment`=OLD.`Attachment`, `BudgetType`=OLD.`BudgetType`, `PopID_Bend`=OLD.`PopID_Bend`, `Bandwidth`=OLD.`Bandwidth`, `Bandwidth_byMI`=OLD.`Bandwidth_byMI`, `HalfCircuit`=OLD.`HalfCircuit`, `Protected`=OLD.`Protected`, `MiuPointUnit`=OLD.`MiuPointUnit`, `MiuPointAmt`=OLD.`MiuPointAmt`, `CostNature`=OLD.`CostNature`; END;

Open in new window


however this line of code:

ActionBy_Audit=USER()

seems not recording the application user for me but system user's name, how can I fix it.

The reason is this colume will most likely give me the same name.
LVL 1
marrowyungSenior Technical architecture (Data)Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Guy Hengel [angelIII / a3]Billing EngineerCommented:
>the application user
unless the application user is the mysql login, mysql cannot know it, except if you store that information in a/the table...

please clarify
0
KimputerCommented:
Your whole system seems to be programmed to have one MySQL account connecting to the database, hence you will only capture one same user.
You would have to REPROGRAM your WHOLE database system, backend and frontend, before you can capture what you need.
While every user has to log in, the actual MySQL communication is still done with that one account that's been configured.
Simple explanation: Install Wordpress (you need to supply MySQL username and password, for example wordpress). It will communicate with user wordpress with the MySQL server. The user you made inside Wordpress is just a user in its own Wordpress user table, NOT a MySQL user (could be done, but big security risk)! No matter how many users inside Wordpress you make, the communication with MySQL will always be the user wordpress (you only authenticate with another username/password for access to the pages, not the actual database connection). This can only be changed by totally reprogramming the Wordpress code (when logging in, switch database connection with new MySQL information)
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
marrowyungSenior Technical architecture (Data)Author Commented:
I think I can make change on this to get ride of it:

ActionBy_Audit=USER() ?

or there are no way anyway ?
0
Newly released Acronis True Image 2019

In announcing the release of the 15th Anniversary Edition of Acronis True Image 2019, the company revealed that its artificial intelligence-based anti-ransomware technology – stopped more than 200,000 ransomware attacks on 150,000 customers last year.

Guy Hengel [angelIII / a3]Billing EngineerCommented:
see above: if each users logins in not using application users, but mysql users, then you can use USER()
otherwise the application user name needs to be provided into the table by the insert/update into the table directly, so that the trigger can use that field...
0
marrowyungSenior Technical architecture (Data)Author Commented:
"if each users logins in not using application users, but mysql users, then you can use USER()"

we are using applicatino users, so how the USER() can be chagne to ? no way ? that one must be the MySQL user anyway ?


and application user can only be handled in application anyway ?

"otherwise the application user name needs to be provided into the table by the insert/update into the table directly, so that the trigger can use that field... "

So this mean no need to use USER() as that username already inserted by the application on the source table already ? so trigger just copy that cell to the audti table ?
0
Guy Hengel [angelIII / a3]Billing EngineerCommented:
>so how the USER() can be chagne to ? no way ?
no way, this is a system function which cannot be changed...
0
marrowyungSenior Technical architecture (Data)Author Commented:
ok.
0
marrowyungSenior Technical architecture (Data)Author Commented:
0
marrowyungSenior Technical architecture (Data)Author Commented:
0
Guy Hengel [angelIII / a3]Billing EngineerCommented:
I am sorry that I cannot help on that one :(
0
marrowyungSenior Technical architecture (Data)Author Commented:
ok, no one can know this, I am a bit surprise. the default one doesn't jump out from the windows when the target table was lock for read operatoin.

but target table was not found error has no problem ! amazing !
!
0
marrowyungSenior Technical architecture (Data)Author Commented:
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
MySQL Server

From novice to tech pro — start learning today.