( Publicación cruzada aquí en el consejo de un usuario en stackoverflow ...)
Tengo una pregunta de seguridad filosófica para todos. Estoy diseñando un diseño de aplicación web ASP.NET donde los datos confidenciales de diferentes organizaciones / clientes se almacenarán en una base de datos de SQL Server. La autenticación del usuario utilizará la autenticación de formularios ASP.NET.
El cifrado de la base de datos completa mediante el Cifrado transparente de la base de datos (TDE) es una tarea sencilla. Pero tengo curiosidad por si deberíamos preocuparnos por el cifrado a nivel de celda (usando algo como el Kit de herramientas de seguridad de la etiqueta de SQL Server que se encuentra en codeplex.com: etiqueta de SQL Server Kit de herramientas de seguridad ).
Si tuviéramos que realizar el cifrado a nivel de celda, podríamos asociar a cada usuario de una organización / cliente a una única cuenta de usuario de SQL que tenga la capacidad de leer / escribir datos para su organización. Por lo tanto, en caso de que una cuenta de usuario de SQL se viera comprometida, limitaría el acceso a los datos solo a esa única organización.
Pero supongamos que creamos una única cuenta de usuario / contraseña de SQL que solo está destinada a que la aplicación web se comunique de forma segura con la base de datos (no se permitirá el acceso directo a la base de datos con fines de informe). Podemos configurarlo con una contraseña suficientemente larga y generada de manera aleatoria, con esas credenciales almacenadas encriptadas en el archivo web.config.
En este punto, ¿hemos asegurado suficientemente el acceso a datos confidenciales en la base de datos (asumiendo que la aplicación limita lo que se muestra, por supuesto)?
En otras palabras, supongamos que tenemos varias cuentas de usuario de SQL con contraseñas ridículamente largas cifradas en el archivo web.config. Si una de esas cuentas de usuario de SQL estuviera comprometida, eso significaría que existe una falla de seguridad que probablemente significaría que todas las cuentas de usuario de SQL estaban comprometidas. Por lo tanto, no existe un valor agregado de seguridad realmente.
(La razón más convincente que se me ocurre para realizar el cifrado a nivel de celda por parte de usuarios de SQL específicos del cliente sería evitar que un agujero de seguridad en la aplicación web real muestre datos de otro cliente).
Espero que la pregunta tenga sentido. ¡Estar interesado en escuchar los pensamientos de otros sobre esto! Gracias de antemano.