En este post voy a documentar el proceso que sigo para copiar una base de datos de Sublime POS 3 a mi computadora local.
Esto es necesario porque a veces un cliente reporta algún error, y la mejor manera de depurarlo es hacerlo con su propia base de datos.
Tomemos en cuenta que el software usa SQLite3 y que tiene 1 base de datos de todos los negocios registrados y 1 base de datos por cada negocio, así que justamente voy a documentar ese proceso de “incorporar” su base de datos a la local.
Este proceso no es tan simple porque también es necesario cambiar la contraseña del usuario ya que SPOS3 usa bcrypt y no puedo ver la contraseña original, solo cambiarla.
Descargando base de datos
Lo primero es identificarla, así que en el servidor hago:
sqlite3 negocios_spos3_by_parzibyte.me.db
SQLite version 3.34.1 2021-01-20 14:10:07
Enter ".help" for usage hints.
sqlite> select * from negocios;
1|parzibyte|parzibyte|hunter2|hunter2|1|2023-12-31T11:09:07|3000-12-31
3|prueba|prueba|hunter2|hunter2|1|2024-01-01T17:25:27|2050-01-01
9|Ejemplo de negocio|hunter2|hunter2|hunter2|1|2025-01-29T10:59:38|2026-02-20
sqlite>
La que me interesa es la 9, así que su nombre es negocio_parzibyte.me_spos9.db, la copio
con scp usuario@servidor:/ubicación . mientra estoy en la carpeta api de mi sistema local.
parzibyte@DESKTOP-PLGLS8D MSYS /c/Users/parzibyte/Documents/desarrollo/go/tiendas-multinegocio/api
$ scp user@server:/ubicación/api/negocio_parzibyte.me_spos9.db .
negocio_parzibyte.me_spos9.db 100% 4144KB 1.6MB/s 00:02
Eso es todo lo que se necesita hacer en el servidor, lo que viene a continuación es exclusivamente en el lado de desarrollo local.
Registrar negocio en base de datos maestra
Ahora que la tengo localmente es
momento de insertar un nuevo negocio. Abro
negocios_spos3_by_parzibyte.me.db y ejecuto:
INSERT INTO negocios
(id, nombre, correo, pass, token, verificado, fecha_registro, fecha_vencimiento)
VALUES
(9, 'ejemplo', 'ejemplo', '$2a$10$VGAObwfH1eSK/alEjpHloONpHDMk6ObgKH2zXdbIooe6FsZDA.nza', '',1,'2026-02-03T19:32:58', '3000-12-31')
Lo importante aquí es dejar una fecha de vencimiento lejana y obviamente poner el id de la BD que descargamos, que en este caso sería el 9.
Contraseña con bcrypt
La contraseña también es importante pues debe ser generada usando los primeros 256 bits de SHA-512 y
pasándola después a bcrypt.
Yo uso la que se ve en el código ($2a$10$VGAObwfH1eSK/alEjpHloONpHDMk6ObgKH2zXdbIooe6FsZDA.nza) que ya sé que es 123 y la he generado con https://github.com/parzibyte/herramientas_programacion/tree/master
En este caso lo he hecho así porque es para pruebas locales. Está de más decir que nunca debemos usar esa contraseña en producción y tampoco debemos exponer los hashes.
Cambiar contraseña de usuarios de negocios
Con lo anterior apenas hemos registrado el negocio, pero el negocio tiene
sus propios usuarios a los que hay que resetearles la contraseña. Yo usaré
la misma $2a$10$VGAObwfH1eSK/alEjpHloONpHDMk6ObgKH2zXdbIooe6FsZDA.nza así
que abriré negocio_parzibyte.me_spos9.db y ejecutaré:
UPDATE usuarios SET contraseña = '$2a$10$VGAObwfH1eSK/alEjpHloONpHDMk6ObgKH2zXdbIooe6FsZDA.nza';
Luego tomamos un usuario de la tabla usuarios y nos fijamos en su nombre. Aquí hay que adivinar cuál
es el que tiene todos los permisos, y si no lo adivinamos siempre los podemos insertar con SQL.
Este nombre de usuario es importante para iniciar sesión.
Iniciando sesión en negocio de cliente
Hasta este punto ya tenemos los datos del cliente en nuestro entorno local, así que tomamos:
nombrede la tablausuariosde la base de datos del negociocontraseñasin hashear de la tablausuariosde la base de datos del negocionombrede la tablanegociosde la base de datos maestra
E iniciamos sesión. En Nombre del negocio va el nombre de negocios y en Usuario
va el nombre de usuarios. En Contraseña obviamente va la contraseña generada con bcrypt.
Y con eso deberíamos poder iniciar sesión manteniendo los datos del cliente pero “robando” su usuario para poder acceder como si fuera él.