En este capítulo se explica la diferencia entre Inicio de Sesión y Usuario de Base de Datos. Al contrario que en otros motores de base de datos, SQL Server tiene dos niveles de profundidad en la definición de sus Usuarios. Por un lado está el Inicio de Sesión (el usuario con el que nos conectamos, el de la password) y por otro lado está el Usuario de Base de Datos (se le asigna al Inicio de Sesión) que es sobre el que se asignan los permisos de acceso a los objetos de base de datos. Esta es una duda típica en quienes empiezan con SQL Server. También se explicá el SID y el UID, que son los usuarios huérfanos (orphaned users) y como repararlos (sp_change_users_login ), syslogins, sysusers, CREATE LOGIN, CREATE USER, sp_addlogin, sp_grantlogin, sp_adduser, sp_addsrvrolemember, sp_addrolemember, etc. |
Un Inicio de Sesión (Login) representa la conexión a la Instancia de SQL Server. Dicha conexión debe validada por algún tipo de servidor de autenticación, de tal modo, que podemos encontrar Inicios de Sesión de Windows (la validación la realiza el Sistema Operativo, y representa al usuario contextual con el que hemos iniciado sesión en Windows) e Inicios de Sesión de SQL Server (la validación la realiza SQL Server, luego es el motor de base de datos quién debe almacenar la contraseña - o su hash - y quién debe validar al usuario). En cualquier caso, un Inicio de Sesión definido en una Instancia puede pertenecer a determinadasFunciones de Servidor (Server Roles) de dicha Instancia, y cuya pertenencia suele conceder determinados privilegios en dicha Instancia de SQL Server (ej: pertenecer a BULKADMIN permite poder realizar cargas masivas en cualquier base de datos de la Instancia, siempre que además se tengan permisos sobre la tabla de destino, claro). Por otro lado, ocurre que los objeto a los cuales habitualmente deseamos acceder (procedimientos almacenados, tablas, etc.), se encuentran en una u otra base de datos de la Instancia, es decir, no se encuentra definidos en la Instancia como tal. Por ello, en cada Base de Datos a la que tengamos que acceder deberemos de tener un Usuario. Aquí está la principal diferencia entre ambos conceptos: un Inicio de Sesión (Login) se define a nivel de Instancia mientras que un Usuario se define a nivel de Base de Datos. Habitualmente, se crea un Inicio de Sesión para una persona (o aplicación) que necesite conectarse a SQL Server, y seguidamente se crea un Usuario para ese Inicio de Sesión sobre la base de datos a la que se desea conceder acceso, de tal modo, que si dicho Inicio de Sesión debe de poder acceder a varias bases de datos, deberá tener un Usuario en cada base de datos. En las siguientes consultas se muestra como un Inicio de Sesión se almacena en la base de datos master (a nivel de la Instancia) y queda definido por su SID, mientras que los Usuarios se almacenan en cada Base de Datos particular y quedan definidos por su UID aunque tienen asignado el SID que les corresponda según el Inicio de Sesión al que pertenecen (este es el mapeo del que hablábamos).
|
Comentarios
Publicar un comentario