¿Se considera segura la separación de datos de diferentes aplicaciones a través de esquemas Oracle?

6

Estoy evaluando las ventajas y desventajas de tener diferentes esquemas de Oracle en comparación con servidores de Oracle separados. Tener un servidor dedicado para cada aplicación es realmente costoso y solo quiero considerar esto si los beneficios de seguridad valen la pena.

Uno de los puntos principales es el tema de la inyección de SQL. En caso de que la aplicación A tenga una inyección de SQL que comprometa todos los datos del esquema A en la base de datos de Oracle, ¿sería posible que un atacante acceda también a los datos del esquema B (en la misma base de datos de Oracle)?

Me inclino por la opinión de que la separación a través de esquemas es suficiente, excepto para los almacenes de datos más críticos. ¿Es esta la mejor práctica y cuáles son los principales factores a considerar?

    
pregunta Demento 12.01.2015 - 17:10
fuente

2 respuestas

2

Es un concepto común crear específico Base de datos - Usuarios para cada aplicación . Estos usuarios deben tener los privilegios mínimos necesarios para hacer su trabajo.

Permite aplicar esto a tu ejemplo:

  • ApplicationA utiliza DataBaseUserA , que tiene los privilegios de Leer / Insertar / Actualizar / Eliminar TablaA en SchemaA.
  • ApplicationB usa DataBaseUserB que tiene los privilegios de leer TableB en SchemaB.
  • Por supuesto, también tienes al menos una cuenta DBA.

Ahora considere que ApplicationB es vulnerable a la inyección de SQL:

  • select * from SchemaA.TableA se inyecta y ejecuta con DataBaseUserB.
  • La respuesta de la base de datos sería ORA-00942: la tabla o la vista no existen

En la mayoría de los casos de uso, consideraría que este comportamiento es lo suficientemente seguro. Por supuesto, una instancia de DataBase completamente diferente agregaría otra capa de seguridad en caso de algún problema crítico de seguridad desconocido en Oracle DB.

    
respondido por el DaniEll 13.01.2015 - 10:17
fuente
1

En el escenario que describiste, si el Esquema A se ve comprometido, salvo una vulnerabilidad desconocida con el propio Oracle , solo tendría acceso a los datos del Esquema B en la medida en que los privilegios de B había sido compartido con A.

En caso de que esto no esté claro, supongamos que tienes TABLE1 y TABLE2 en el Esquema B. Ahora asumamos que ejecutas el siguiente comando en el Esquema B:

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA_B.TABLE1 TO SCHEMA_A;

Luego, si el esquema A está comprometido, TABLE1 está en riesgo, pero TABLE2 debería estar seguro.

Y si en cambio ejecutas lo siguiente en el Esquema B:

GRANT SELECT ON SCHEMA_B.TABLE1 TO SCHEMA_A;

Luego, se reduce su riesgo (pero no se elimina): el malvado que penetró en el Esquema A podría ver los datos para TABLE1 (que aún podría ser muy malo, dependiendo de lo que haya) - pero no debería poder cambiar los datos .

Ahora volviendo al punto en el que escribí en cursiva: (" salvo alguna vulnerabilidad desconocida con el propio Oracle "): un lote de las vulnerabilidades que causaron un enorme dolor comenzó como Vulnerabilidades desconocidas con aplicaciones específicas. Si tiene el lujo de separar los servidores (teniendo en cuenta los gastos del servidor, el tiempo de mantenimiento y los gastos, las necesidades actuales y futuras para compartir datos directamente), entonces, cuanto más aislamiento pueda dar a sus datos, más seguro estará.

    
respondido por el Joe DeRose 13.01.2015 - 15:55
fuente

Lea otras preguntas en las etiquetas