Ir al contenido

Modo solo lectura

El modo solo lectura bloquea todas las operaciones de modificación, permitiendo únicamente consultas SELECT.

Ventana de terminal
# Activar modo solo lectura
MSSQL_READ_ONLY=true
-- Todas las consultas SELECT
SELECT * FROM users
SELECT u.*, o.total FROM users u JOIN orders o ON u.id = o.user_id
-- Subconsultas
SELECT * FROM (SELECT id, name FROM users) sub
-- CTEs
WITH active AS (SELECT * FROM users WHERE active = 1)
SELECT * FROM active
-- Agregaciones y funciones de ventana
SELECT department, AVG(salary) FROM employees GROUP BY department
-- Modificaciones de datos
INSERT INTO users VALUES (1, 'test') -- Bloqueado
UPDATE users SET name = 'nuevo' WHERE id = 1 -- Bloqueado
DELETE FROM users WHERE id = 1 -- Bloqueado
-- DDL
CREATE TABLE temp (id INT) -- Bloqueado
DROP TABLE users -- Bloqueado
ALTER TABLE users ADD col INT -- Bloqueado
-- Ejecución de código peligrosa
EXEC xp_cmdshell 'dir' -- Siempre bloqueado
EXEC sp_executesql '...' -- Siempre bloqueado
EXEC sp_configure ... -- Siempre bloqueado

Lecturas administrativas y de esquema permitidas

Sección titulada «Lecturas administrativas y de esquema permitidas»

Aunque el modo es de solo lectura, se permiten ciertas operaciones de administración e introspección de esquema que son inherentemente de solo lectura. Esto facilita el descubrimiento de la base de datos por parte de herramientas y asistentes de IA:

-- Procedimientos de sistema seguros para exploración de esquema
EXEC sp_help 'dbo.Usuarios' -- Estructura de una tabla
EXEC sp_helptext 'dbo.MiProcedimiento' -- Código fuente de un objeto
EXEC sp_spaceused 'dbo.Pedidos' -- Tamaño y uso de espacio
EXEC sp_columns @table_name = 'Clientes'
EXEC sp_fkeys 'Pedidos'

Estos procedimientos están explícitamente permitidos porque no modifican datos ni configuración. Cualquier otro procedimiento del sistema (o EXEC de SQL dinámico) sigue estando bloqueado.

Se recomienda preferentemente el uso de las herramientas dedicadas explore e inspect para la mayoría de los casos de descubrimiento de esquema.

La validación usa expresiones regulares con word boundaries (\bINSERT\b, \bUPDATE\b, etc.) para evitar falsos positivos. Por ejemplo:

-- Permitido (no contiene la palabra INSERT como operación)
SELECT created_at FROM transactions
-- Permitido (update_count es un nombre de columna, no una operación)
SELECT update_count FROM statistics
-- Bloqueado (contiene la operación UPDATE)
UPDATE users SET status = 'active'

Para permitir modificaciones solo en tablas específicas, combina con MSSQL_WHITELIST_TABLES:

Ventana de terminal
MSSQL_READ_ONLY=true
MSSQL_WHITELIST_TABLES=temp_ai,v_temp_ia

Consulta la sección Whitelist de tablas para más detalles.