SofiaDB · línea de órdenes (sofia datos)#
Consejo
En corto: sofia datos agrupa todo lo que se hace con una base desde la terminal: copiarla en caliente (copiar), cuidar sus claves y su cifrado (claves, cifrar, rotar, borrar) y dar acceso remoto de solo lectura a personas (alta, permiso, revocar, personas, auditoria). Las frases secretas nunca van como argumento: se leen de SOFIA_FRASE o de la entrada.
| Orden | Para qué | Dónde corre |
|---|---|---|
copiar | Copia consistente y comprobada de una base | En tu equipo |
claves | Maestra del nodo: crear, ver, rotar, exportar, importar | En tu equipo |
cifrar | Cifra una base o la deja sin cifrar | En tu equipo |
rotar | Cambia la clave de datos de una base | En tu equipo |
borrar | Borrado criptográfico | En tu equipo |
alta, permiso, revocar, personas, auditoria | Personas y permisos del acceso remoto | En el servidor |
Cómo se indica la base#
Donde una orden pide <base> puedes escribir:
- la ruta de un archivo
.sdbque exista; - el id de una app (
gastos): su base privada, en~/.sofia/datos/<id>/.sofiadb/base.sdb; app/inquilino: la base de un inquilino de esa app.
Si no existe, la orden lo dice y no toca nada.
copiar#
sofia datos copiar <base.sdb|id de app> <destino.sdb>
Hace una copia a partir de una instantánea: refleja exactamente lo confirmado al empezar. El destino aparece solo cuando está completo, sincronizado y comprobado. Al terminar imprime tamaño, tablas, filas y tiempo.
Entre procesos, la base tiene un cerrojo exclusivo del sistema operativo. Si otro proceso la tiene abierta (por ejemplo, una app web servida por Atrio), la orden no puede abrirla y responde que la copia en caliente se hace desde ese proceso: en una app, con datos.copiar.
Claves de la maestra#
Cada nodo tiene una clave maestra, guardada en ~/.sofia/datos/claves. Cada base cifrada lleva su propia clave de datos, envuelta con la maestra en su prólogo.
sofia datos claves iniciar
sofia datos claves estado
sofia datos claves rotar
sofia datos claves exportar <archivo>
sofia datos claves importar <archivo>
| Subcomando | Qué hace |
|---|---|
iniciar | Crea la maestra si no existe (también nace sola en el primer cifrar). Si la crea, recuerda exportar una copia: sin ella no hay recuperación |
estado | Muestra la maestra activa, cuántas hay guardadas, si ya se exportó con frase y si hay una rotación a medias |
rotar | Crea una maestra nueva y vuelve a envolver con ella los prólogos de todas las bases del nodo. Informa bases, prólogos nuevos, limpiados y sin cifrar |
exportar <archivo> | Escribe la maestra protegida con una frase |
importar <archivo> | Recupera una maestra exportada, con la misma frase |
Si rotar deja bases pendientes (por ejemplo, abiertas en otro proceso), termina con error y lista cuáles son: se repite la orden cuando estén libres. estado avisa de una rotación a medias.
La frase: SOFIA_FRASE#
La frase de exportar e importar nunca se pasa como argumento, para que no quede en el historial de la terminal. Se toma de la variable de entorno SOFIA_FRASE o, si no existe, de la primera línea de la entrada estándar.
SOFIA_FRASE="una frase larga y propia" sofia datos claves exportar respaldo.clave
Si no hay frase en ninguno de los dos lugares, la orden falla con «falta la frase».
Cifrar y descifrar#
sofia datos cifrar <base> [--sin-cifrar]
| Uso | Efecto |
|---|---|
cifrar <base> | Cifra la base en reposo. Si el nodo no tiene maestra, la crea y lo avisa |
cifrar <base> --sin-cifrar | Deja la base sin cifrar |
Una base que ya está cifrada no se cifra otra vez: la orden lo dice y propone rotar. La operación se hace con una copia en caliente y al terminar informa páginas, bytes y milisegundos.
Rotar la clave de datos#
sofia datos rotar <base>
Cambia la clave de datos de una base cifrada, con copia en caliente. Es distinta de claves rotar, que cambia la maestra del nodo.
Borrado criptográfico#
sofia datos borrar <base>
Destruye la clave de la base: sin ella, los datos cifrados quedan ilegibles para siempre. No se puede deshacer. Hazlo solo cuando de verdad quieras perder la base.
Acceso remoto#
Estas cinco órdenes administran quién puede consultar bases por el visor remoto (VisorDB). Se ejecutan en el servidor, con el mismo usuario y SOFIA_HOME que corre Atrio, y se indican con --atrio <atrio.json> (una vez por cada Atrio con datos_remoto).
sofia datos alta --persona <n> --vence <días>d --atrio <atrio.json>
sofia datos permiso --persona <n> leer <base>.<tabla|*> --vence <días>d [--motivo <texto>] --atrio <atrio.json>
sofia datos revocar --persona <n> | --dispositivo <id> --atrio <atrio.json>
sofia datos personas --atrio <atrio.json>
sofia datos auditoria [--desde AAAA-MM-DD] [--verificar] --atrio <atrio.json>
La orden viaja al punto de gestión de cada Atrio, con su ficha secreta y el certificado fijado por la huella que Atrio dejó al arrancar. Si un Atrio está apagado, la orden abre directamente su base de accesos y lo avisa.
| Opción | Significado |
|---|---|
--atrio <atrio.json> | El Atrio al que va la orden; se repite para varios |
--persona <n> | Nombre de la persona |
--dispositivo <id> | Un dispositivo concreto (solo en revocar) |
--vence <días>d | Cuántos días vale (90d, 30d) |
--motivo <texto> | Anotación del permiso |
--desde AAAA-MM-DD | Primera fecha de la auditoría |
--verificar | Comprueba la cadena de la auditoría |
alta#
Da de alta a una persona, sin ningún permiso todavía. Imprime un código de un solo uso, válido por 10 minutos, y las huellas de cada nodo. La persona compara esas huellas con las que muestra VisorDB antes de confirmar. El mismo código vale una vez en cada nodo.
permiso#
Concede lectura sobre una tabla (<base>.<tabla>) o sobre todas las de la base (<base>.*), con vencimiento. Nada se concede por defecto. La orden indica la operación y el objeto, por ejemplo leer gastos.*. Si ningún nodo tiene esa base, falla.
revocar#
Revoca a una persona entera o a un dispositivo (uno de los dos) y cierra al momento sus sesiones vivas. Informa dispositivos revocados, sesiones cerradas y tiempo.
personas#
Lista, por nodo, cada persona con su estado, su vencimiento, sus dispositivos (marcando los revocados) y sus permisos (marcando los que ya no están vigentes).
auditoria#
Muestra las consultas hechas: número, instante, persona, dispositivo, operación, base, filas, duración y resultado. Nunca guarda valores de parámetros ni filas. Con --verificar comprueba la cadena de hashes; si una entrada fue alterada o falta, lo dice y la orden termina con error.
Más sobre el visor y sus garantías en Acceso remoto.
Mensajes y salida#
| Situación | Resultado |
|---|---|
| Orden u opción desconocida | Muestra el uso y termina con error |
Falta --atrio | «indica el atrio.json de cada Atrio con --atrio» |
El atrio.json no tiene datos_remoto | Ese Atrio no da acceso remoto: lo dice con el nombre del archivo |
--vence sin número de días | «--vence espera días, por ejemplo 30d» |
--desde con otro formato | «--desde espera AAAA-MM-DD» |