If you're using SQL Server 2016 or later, then use a system-versioned temporal table:
Temporal Tables - SQL Server | Microsoft Docs[
^]
Otherwise, create a separate "history" table for each tracked table. Eg:
User_master:
============================================
| Id (PK) | Name | Email | Phone | Address |
============================================
User_master_history:
============================================================================
| Id (PK,FK) | Version (PK) | Name | Email | Phone | Address | DateChanged |
============================================================================
The history table has a compound primary key on the ID and version number, and a foreign key from the ID to the main table.
NB: If any record is deleted from the main table, the history of that record will also be deleted. If that is not what you want, then don't create a foreign key between the history table and the main table, and ensure that IDs from deleted records are never reused in the main table.