SofiaDB · acceso remoto de solo lectura#
Consejo
En corto: una persona, desde su equipo, consulta las bases de un servidor con VisorDB, por el mismo puerto HTTPS que ya usa el servidor. Al instalar no hay nada concedido: la persona se da de alta con un código de un solo uso, recibe permisos explícitos por base y tabla con vencimiento, y cada consulta queda en una auditoría encadenada. Solo lectura.
Qué es#
VisorDB es una app de Sofía que corre en tu equipo (en 127.0.0.1) y se abre en el navegador. Se conecta a un servidor con Atrio que tenga activado datos_remoto. La clave que te identifica vive en tu equipo, protegida por la plataforma, y nunca sale de él.
| Pantalla | Qué muestra |
|---|---|
| Conexiones | Alta por dominio con el código; huellas para comparar; estado y vencimiento del permiso |
| Árbol | Nodo, base, tabla, columnas e índices: solo lo que tus permisos alcanzan |
| Datos | 500 filas por página, paginación por clave, filtros como parámetros |
| Editor SQL | Una sentencia, parámetros $n en campos aparte, tiempo y filas, y botón «Plan» (EXPLAIN) |
| Historial | Local: la consulta, la fecha, la duración y las filas; nunca los resultados |
Garantías#
- Nada por defecto. Una persona recién dada de alta no ve nada. Cada permiso es explícito, por base y tabla, con vencimiento (máximo 90 días); el alta vence en 365 días como máximo.
- Solo lectura, en dos capas. El analizador del SQL clasifica la sentencia y exige el permiso; además la sesión del motor se abre en modo solo lectura y rechaza cualquier cambio con
SOLO_LECTURA. - Canal propio sobre HTTPS. Además del TLS, los mensajes van en sobres cifrados y firmados entre la identidad de tu equipo y la del servidor. Un servidor impostor, aunque tenga un certificado válido, no pasa el primer saludo.
- Dispositivo desconocido, ruta inexistente. Quien no tiene credencial recibe la misma respuesta que ante una ruta que no existe.
- Fuerza bruta. Cinco sesiones inválidas por dispositivo o por IP bloquean 15 minutos, y queda anotado.
- Límites. SQL de hasta 64 KiB; 500 filas por página (hasta 10 000); consultas de hasta 10 segundos; 4 consultas en vuelo por persona; respuesta de hasta 4 MiB.
- Filtro por IP.
desdeen la configuración rechaza otras direcciones tras el saludo TLS, antes de leer nada. - Auditoría encadenada. Cada consulta registra persona, dispositivo, base, operación, filas, duración y resultado, con hashes SHA-256 encadenados. No guarda valores de parámetros ni filas. Una entrada alterada rompe la verificación.
Cómo se da acceso#
En el servidor, con el usuario que corre Atrio (detalle en la línea de órdenes):
sofia datos alta --persona ana --vence 90d --atrio atrio.json
sofia datos permiso --persona ana leer gastos.* --vence 30d --atrio atrio.json
altaimprime un código de un solo uso (10 minutos) y las huellas de los nodos.- En VisorDB, la persona crea la conexión con el dominio y el código, y compara las huellas con las impresas.
- Solo si coinciden se envía el código, cifrado. El dispositivo queda dado de alta, sin permisos.
permisoconcede la lectura necesaria; la sesión dura 8 horas, o 30 minutos sin uso.
Para quitar el acceso: sofia datos revocar --persona ana --atrio atrio.json cierra sus sesiones vivas en menos de un segundo. Para revisar: sofia datos personas y sofia datos auditoria --verificar.
Configuración del servidor#
En el atrio.json del Atrio público:
"datos_remoto": { "dominio": "datos.ejemplo.com", "desde": ["203.0.113.5/32"],
"nodos": { "interno": "https://127.0.0.1:8471" } }
Un Atrio interno que solo atiende a otro de la misma máquina usa "datos_remoto": { "solo_local": true }. El Atrio público atiende sus bases y reenvía sobres opacos al interno para las demás: el relé no lee nada.
Cada nodo guarda su identidad y la base de accesos en SOFIA_HOME/datos-acceso/<nodo>/, con permisos 0600, del usuario que corre Atrio.
Protocolo#
POST https://<dominio>/v1/<mensaje>; cuerpo y respuesta son sobres con JSON dentro, salvo hola, que va en claro y firmado. Una sentencia por mensaje.
| Mensaje | Qué hace |
|---|---|
hola | Intercambia desafíos; el servidor firma y entrega su huella |
alta | Registra el dispositivo con el código de un solo uso |
sesion | Abre la sesión firmando el desafío; devuelve el resumen de permisos |
catalogo | Bases, tablas, columnas e índices alcanzables |
consulta | Un SELECT o EXPLAIN, con parámetros y paginación por clave |
cerrar | Cierra la sesión |
Cada sobre lleva la sesión, un contador creciente y el instante (con tolerancia de 5 minutos): los repetidos se rechazan. El visor no recibe el texto de los errores internos, solo su código estable.