Hace un tiempo atrás hice un post sobre la creación de logins de forma masiva dentro de una base de datos a través de un script de Powershell. Sin embargo hasta ese punto el usuario recientemente creado, solamente iba a poder ingresar a la instancia de base de datos, mas no iba a poder acceder a ninguna de las bases de datos que se encuentran en esa instancia.

Adicionalmente al problema mencionado en el párrafo anterior, sumamos el hecho de que en algunos servidores no se tiene el modulo más reciente de SQL Server para Powershell, pero si el modulo de dbatools, esto puede darse debido a que son sistemas operativos antiguos como el Windows Server 2012. El presente articulo trata sobre la creación de una lista de logins con autenticación SQL más la creación de su respectivo usuario en todas las bases de datos de usuario y con los roles de lectura y escritura de información sobre las mismas.

El login a diferencia de lo que se hizo en el articulo anterior, se creará con el objeto SMO de los logins para SQL Server. Para poder listar los logins a crearse se debe tener un archivo CSV que contenga los logins y los passwords. A continuación se muestra un ejemplo de dicho archivo con sólo 5 logins, sin embargo podrían ser muchos mas:

Ahora si veamos el script el cual recorrerá la lista de logins que se encuentran dentro del archivo anteriormente mencionado, y por cada uno de ellos recorrera las bases de datos de usuario que no están como read-only u offline para crear su usuario respectivo, finalmente se asignará el rol “db_datareader” y “db_datawriter” para que pueda leer y modificar la data de la base de datos que esta siendo procesada.

El script adicionalmente muestra un mensaje indicando el avance, esto lo hace a traves de la instrucción “Write-Host”, si no se desea mostrar el avance simplemente se debe eliminar esas lineas.

Finalmente como bono extra, les mostrare como eliminar esos mismos logins de la instancia y sus respectivos usuarios de todas las bases de datos. Esto puede ser requerido en el caso que los logins sean solamente temporales.

Espero les sea de utilidad