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:

  • nombre de la tabla usuarios de la base de datos del negocio
  • contraseña sin hashear de la tabla usuarios de la base de datos del negocio
  • nombre de la tabla negocios de 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.

Si el post ha sido de tu agrado te invito a que me sigas para saber cuando haya escrito un nuevo post, haya actualizado algún sistema o publicado un nuevo software. Facebook | X | Instagram | Telegram | También estoy a tus órdenes para cualquier contratación en mi página de contacto