none
Sáquenme de una duda respecto a la seguridad de base de datos en SQL Server RRS feed

  • Pregunta

  • ¿Para impedir el acceso a una base de datos se hace asignándole el acceso a un usuario que tenga contraseña? ¿o se le asigna una contraseña directamente a la base de datos?

    Es que a la base de datos de mi programa puedo acceder en SQL Server desde un usuario que cree con autenticación de SQL Server y también puedo acceder indistintamente con el usuario de Windows.

    En todo caso la consulta es ¿cómo la configuro para que solo se pueda acceder desde el usuario que cree en SQL Server?

    • Cambiado Enrique M. Montejo lunes, 30 de mayo de 2016 8:22 Pregunta relacionada con Microsoft SQL Server.
    lunes, 30 de mayo de 2016 6:14

Respuestas

  • No se asignan contraseñas a las bases de datos, siempre se asignan a usuarios. Lo que se puede hacer en la base de datos es cambiar los permisos para que solo ciertos usuarios puedan acceder a ella.

    La asignación de usuarios es un proceso en dos fases: Primero se crea un Login en la instancia del motor de base de datos, y luego ese Login se mapea a un User que puede ser distinto en cada base de datos montada en esa misma instancia. Dado que en español tendemos a traducir como "usuario" tanto Login como User, voy a usar el término en inglés para evitar confusiones.

    El Login de SQL Server puede estar conectado a un usuario de Windows, o bien (si el SQL Server se configuró para admitir esta opción) puede ser un Login de SQL Server con nombre y password. Cualquiera de los dos, si se ha creado en la pestaña de "logins", se puede mapear a un User en la base de datos, y podría hacer sobre dicha base aquello que se le haya concedido al otorgarle permisos.

    Hay un caso especial, que es el de los Logins que tengan asignado el rol de servidor "sysadmin". Los logins que sean SysAdmin se mapean automáticamente al User "dbo" en todas las bases de datos, y el dbo tiene permisos ilimitados en su base de datos.

    Y otro caso especial se produce si estás usando una edición Express y tu programa monta la base de datos en modo "User Instance". En ese caso, recibe automáticamente permisos de dbo sobre esa instancia de usuario con independencia de la configuración de Logins de la instancia.

    En consecuencia, para restringir los permisos como quieres, tienes que revisar todo el circuito: ver qué logins tienes, a qué users están mapeados en esa base de datos, y qué permisos están concedidos a los Users. En cualquiera de los puntos puedes intervenir como quieras: Puedes borrar Logins, borrar Users, quitar permisos, etc. Asegúrate de dejar al menos un usuario de Windows que sea sysadmin para poder usarlo para realizar el mantenimiento de la instancia de SQL Server. Evidentemente, los usuarios no deben poder hacer login con esa cuenta de Windows, ya que esa cuenta siempre les daría acceso a todas las bases de datos.

    • Marcado como respuesta James-2016 lunes, 30 de mayo de 2016 9:07
    lunes, 30 de mayo de 2016 6:27

Todas las respuestas

  • No se asignan contraseñas a las bases de datos, siempre se asignan a usuarios. Lo que se puede hacer en la base de datos es cambiar los permisos para que solo ciertos usuarios puedan acceder a ella.

    La asignación de usuarios es un proceso en dos fases: Primero se crea un Login en la instancia del motor de base de datos, y luego ese Login se mapea a un User que puede ser distinto en cada base de datos montada en esa misma instancia. Dado que en español tendemos a traducir como "usuario" tanto Login como User, voy a usar el término en inglés para evitar confusiones.

    El Login de SQL Server puede estar conectado a un usuario de Windows, o bien (si el SQL Server se configuró para admitir esta opción) puede ser un Login de SQL Server con nombre y password. Cualquiera de los dos, si se ha creado en la pestaña de "logins", se puede mapear a un User en la base de datos, y podría hacer sobre dicha base aquello que se le haya concedido al otorgarle permisos.

    Hay un caso especial, que es el de los Logins que tengan asignado el rol de servidor "sysadmin". Los logins que sean SysAdmin se mapean automáticamente al User "dbo" en todas las bases de datos, y el dbo tiene permisos ilimitados en su base de datos.

    Y otro caso especial se produce si estás usando una edición Express y tu programa monta la base de datos en modo "User Instance". En ese caso, recibe automáticamente permisos de dbo sobre esa instancia de usuario con independencia de la configuración de Logins de la instancia.

    En consecuencia, para restringir los permisos como quieres, tienes que revisar todo el circuito: ver qué logins tienes, a qué users están mapeados en esa base de datos, y qué permisos están concedidos a los Users. En cualquiera de los puntos puedes intervenir como quieras: Puedes borrar Logins, borrar Users, quitar permisos, etc. Asegúrate de dejar al menos un usuario de Windows que sea sysadmin para poder usarlo para realizar el mantenimiento de la instancia de SQL Server. Evidentemente, los usuarios no deben poder hacer login con esa cuenta de Windows, ya que esa cuenta siempre les daría acceso a todas las bases de datos.

    • Marcado como respuesta James-2016 lunes, 30 de mayo de 2016 9:07
    lunes, 30 de mayo de 2016 6:27
  • Muchas gracias.
    lunes, 30 de mayo de 2016 9:07