2009-01-30 22 views
9

Acabo de tener una entrevista en Redmond, donde me hicieron un montón de preguntas de seguridad relacionadas con asp.net. Una de las preguntas que hicieron fue sobre la configuración de una aplicación de intranet segura para usar la delegación restringida para acceder al Servidor SQL. En este escenario, una cuenta de usuario de AD tiene acceso delegado al SQL Server. Por supuesto, el objetivo general es a) no almacenar ningún nombre de usuario/contraseña en ningún lugar del servidor web (web.config), yb) proporcionar un modelo de seguridad abstraído que pueda administrarse en Active Directory.Acceso anónimo (IIS) y SQL Server

Esto me hizo pensar en cómo he estado configurando mis sitios para el acceso anónimo todos estos años. Normalmente ejecutaré mis sitios web de IIS utilizando la cuenta anónima predeterminada y almacenaré la cadena de conexión en el web.config (encriptado, y algunas veces en texto claro). Esto, por supuesto, requiere que su SQL Server se ejecute en modo mixto. Así que mi pregunta es, ¿qué pasaría si no almacenamos la cadena de conexión en el web.config en absoluto, y simplemente creamos una cuenta de dominio anónimo única para el sitio web en particular que tendría acceso a db_datareader dentro de SQL Server? ¿Hay alguna razón por la cual sería una mala idea hacer esto?

He intentado pensar en todos los escenarios donde esta sería una mala idea, y el único en el que puedo pensar es dónde un "hacker" ha puesto en peligro el código en el servidor web, y de alguna manera ha tenido acceso a SQL Server ... pero esto podría suceder en cualquier escenario.

¿Alguien conoce las mejores prácticas aquí?

Respuesta

1

Donde trabajo, tenemos un servicio de Windows que se ejecuta bajo una cuenta de dominio específica. Esa cuenta está configurada en SQL Server como inicio de sesión y tiene un usuario coincidente en el DB al que necesita acceder. Nunca hemos tenido ningún problema con esto.

Creo que lo más importante es configurar correctamente el usuario (o función) de la base de datos para que solo tenga acceso a lo que necesita.

He considerado usar AD para administrar el acceso SQL de una manera similar a la que describe en su primer párrafo. (Grupo AD -> Inicio de sesión en SQL Server -> Usuario DB -> Objetos DB) El único inconveniente que puedo ver hasta ahora es que, si un usuario se conecta directamente a la base de datos, eludiría cualquier lógica que tenga en su aplicación. Una de las ventajas es saber qué usuarios de dominio acceden a su base de datos.

+0

En el primer párrafo menciono la delegación restringida. Esto tomará una cuenta de dominio y suplantará a un usuario con su acceso "restringido" solo a SQL Server, nada más en la granja de servidores. En este escenario, su usuario no podrá acceder a SQL directamente, solo a través de la aplicación. –

2

Quizás podría utilizar ODBC para crear un DSN para la conexión de SQL Server. Entonces su web.config solo necesita conocer el DSN. Esto puede requerir que use System.Data.OleDb. Nunca he visto DSN utilizado en ASP.NET pero solía ser bastante estándar para ASP clásico. Y nunca escuché que Active Directory se esté usando para administrar ODBC.

Cuestiones relacionadas