Una de las cosas que más se ve en la configuración de las personas son los usuarios de base de datos (para uso de una aplicación real) que solo tienen permisos SELECCIONAR / ACTUALIZAR / INSERTAR / BORRAR. Un usuario separado (que además tiene CREATE / ALTER / DROP / etc) se usa para implementar realmente actualizaciones de esquema (ya sea una cuenta de administrador o un usuario dedicado para ese propósito).
Me pregunto qué es lo racional detrás de esto.
Hay dos situaciones que estoy considerando específicamente, ambas en un entorno de implementación continua (por lo que la aplicación se crea y se implementa automáticamente):
- Un sistema de implementación independiente realiza actualizaciones de esquema al implementar la aplicación en sí.
- La aplicación realiza sus propias actualizaciones de esquema en el inicio inicial.
El escenario 2 a menudo es necesario cuando se implementan muchos entornos en redes separadas (por ejemplo, VPC de AWS separadas).
En el caso del Escenario 1, no es un gran problema tener una cuenta de usuario separada con privilegios de esquema, pero en el caso de 2, es.
La única razón que he escuchado es la declaración de cancelación "menos privilegios son mejores para la seguridad". No es que no esté de acuerdo con esta afirmación, pero me gustaría entender por qué es mejor para la seguridad.
Creo que esto se reduce a la pregunta: si alguien compromete las credenciales ... ¿qué pueden hacer con los privilegios de esquema que no pueden hacer solo con SELECT / UPDATE / DELETE?
- ¿"Destruir" la base de datos? DELETE es bastante capaz de eso. UPDATE / INSERT es posiblemente aún más peligroso, ya que un atacante podría modificar sutilmente los datos existentes de una manera que no causará una falla catastrófica obvia, como eliminar una tabla o eliminar todas las filas
- ¿Extraer datos? SELECT hace eso.
- ¿Modificar el esquema? Uh .. ¿Con qué fin? Si se hace de una manera que rompa la aplicación, es obvio, y de cualquier manera, puede ser eliminado por la próxima implementación de la aplicación.
¿Me estoy perdiendo algo más?