2009-06-09 22 views
9

Tenemos un requisito de un cliente para proteger la base de datos que nuestra aplicación utiliza, incluso de sus administradores locales (los auditores simplemente les dieron ese requisito).Cómo proteger una base de datos del Server Administrator en el servidor Sql

En su requerimiento, proteger los datos significa que el administrador del servidor Sql no puede leer ni modificar datos confidenciales almacenados en tablas.

Podríamos hacer eso con cifrado en SQL Server 2005, pero que pudiera interferir con la tercera parte ORM, y tiene otras desventajas, como la indexación, etc.

en SQL Server 2008 podríamos utilizar TDE, pero Entiendo que esta solución no protege contra un usuario con derechos de administrador del servidor Sql para consultar la base de datos.

¿Existe alguna mejor práctica o solución conocida para este problema?

Este problema podría ser similar al de tener una aplicación alojada por un proveedor de host, y desea proteger los datos de los administradores del host.

Podemos utilizar SQL Server 2005 o 2008.

+2

Estoy manteniendo una pestaña sobre esto, porque no creo que sea posible hacerlo. –

+1

¿Puede ser más específico a lo que se refiere con "proteger"? ¿No quiere que vean PII en la base de datos, por ejemplo, o está tratando de evitar que dejen el servicio y eliminen el archivo mdf? –

+0

¿Es esta la primera compañía con una aplicación de terceros que es una interfaz para SQL Server, los auditores han hecho esta recomendación? Alguien tiene que ser el administrador. – JeffO

Respuesta

6

Esto se ha preguntado mucho en el último fewweeks. Las respuestas por lo general se reducen a:

(

a) Si no se controla la aplicación que están condenados a confiar en que el DBA

o

b) Si lo hace el control de la aplicación puede cifrar todo con una clave que solo conoce la aplicación y descifrar a la salida. Sin embargo, dañará el rendimiento un poco (o mucho), es por eso que existe TDE. Una variante de esto para evitar la manipulación es usar un hash criptográfico de los valores en la columna, verificándolos al acceder a la aplicación.

)

y

c) hacer una amplia auditoría, para que pueda controlar cuáles son sus administradores hacen.

+0

+1 Buen resumen. –

0

Si no desea que ninguna persona en el grupo de administración en el servidor pueda acceder a la base de datos, elimine el usuario "BUILTIN \ Administrators" en el servidor.

Sin embargo, asegúrese de tener otro usuario que sea un administrador de sistema en el servidor.

+0

Eliminamos el grupo Builtin \ Administrators y agregamos un grupo DBA a la función sysadmin. Sin embargo, tenemos un cierto nivel de confianza en nuestros administradores de sistema porque nada realmente les impide agregarse al grupo de DBA. – NYSystemsAnalyst

+0

En SQL Server 2008, BUILTIN \ Administradores no son administradores del sistema de forma predeterminada; debe agregarlos explícitamente durante la instalación. Sin embargo, si todavía tienen acceso al cuadro real, siempre podrían cerrar el servicio, copiar las bases de datos y reinstalar SQL 2008 con ellos como administradores. – Eric

0

Otra forma en que escuché que una compañía ha implementado pero no lo he visto es: hay un organismo gubernamental que emite un tipo de certificado con sello de tiempo. cada cambio de db se envía a la cola asincrónica y tiene marca de tiempo con este certificado y se almacena fuera del sitio. De esta forma, nadie puede eliminar nada sin romper la cadena de marca de tiempo.

no sé cómo funciona esto exactamente en un nivel más profundo.

1

Creo que la solución correcta sería permitir que solo las personas de confianza sean DBA. Está implícito en ser DBA, que tiene acceso completo, por lo tanto, en mi opinión, su auditor debe exigirle que tenga procedimientos para restringir quién tiene acceso a DBA. De esa manera usted trabaja con el sistema a través de procesos en lugar de trabajar en el sistema (es decir, servidor sql). Tener una persona en la que no confíes sea DBA sería una locura ...

+2

¿Qué sucede si la base de datos no reside en su organización, sino en un proveedor de servicios de hosting? –

+0

Esperemos que solo aloje su servidor sql en lugares en los que confíe y tal vez incluso tenga acuerdos. No permita que nadie tenga en sus manos su DB si no confía en ellos. – khebbie

3

Puede que tenga información salarial en mis tablas, y no quiero que mi dba de confianza lo vea. Ante el mismo problema hemos reducido las opciones a:

1- Cifrar fuera de SQLServer, antes de las inserciones y actualizaciones y descifrar después de las selecciones. es decir: utilizando el cifrado .net. Desventaja: Pierdes algunas capacidades de indexación y búsqueda, no puedes usar like y betweens.

2- Utilice herramientas de terceros (a nivel de IO) que bloquean la basura de la base de datos a menos que se proporcione una contraseña. es decir: www.Blockkk.com Desventaja: Deberá confiar en una herramienta de terceros instalada en su servidor. Es posible que no se mantenga al día con los parches de SQL Server, etc.

3- Utilice una solución de auditoría que hará un seguimiento de las selecciones, inserciones, eliminaciones, etc ... Y notificará (por correo electrónico o registro de eventos) si violaciones ocurrieron. Una violación de muestra podría ser un dba ejecutando un seleccionar en su tabla de Sueldos. luego dispara el dba y cambia los salarios de todos.

+2

"luego disparar el dba y cambiar los salarios de todos" >> DBACount-1 == Salaries.Amount * 1.10? –

4

Los auditores siempre preguntan por esto, como si pidieran otras cosas que nunca se pueden hacer.

Lo que necesita hacer es ponerlo en términos de mitigación de riesgos y mostrar qué controles tiene (seguimiento cuando los usuarios son elevados a administradores, lo que hicieron y que fueron eliminados después) en lugar de absolutos.

Una vez tuve un jefe que pedía la redundancia total del sistema sin definir a qué se refería ni cuánto estaba dispuesto a pagar y sacrificar.

Cuestiones relacionadas