Pues una forma elegante no veo por que lo que te piden ya no es "elegante"...
Basandome en la información que has puesto, yo preferiría tener los datos A como datos "maestros" y guardar en otras tablas sólo las modificaciones hechas por los usuarios; Esta es la manera mas "elegante" que se me ocurre en este momento con esa información pero si es la mas compleja de desarrollar, dado que tienes que validar la existencia o inexistencia de registros en la tabal para el usuario.
Otra, podría ser, guardar en un esquema diferente a cada usuario y crear las tablas y los datos desde el esquema donde está A y saber que el usuario jperez se conecta al esquema datos_jperez por dar un ejemplo.
La otra, quizá la mas sencilla de todas y definitivamente no elegante es crear en cada tabla una columna llamada Usuario y que allí se guarde el usuario al que pertenece ese campo, entonces cuando el usuario es creado en el sistema se toman todos los datos A y se reescriben en las tablas, cambiandoles el valor de la columna usuario por su nombre de usuario(usuario debe ser llave primaria).
La primera opcion es la que considero mas "elegante" por el hecho que la base de datos va a tener menos datos duplicados, por ende va a ocupar menos espacio en disco; las siguientes dos opciones yo las considero unas "deboradoras de disco" ya que el tamaño de las bases de datos será enorme y la cantidad de registros duplcados sera muy elevada(por no decir que puede darse el caso de tener "copias exactas" en ciertos puntos en el tiempo).
Espero haberte ayudado.
Saludos,
Franklin Gamboa