Pregunta

¿Es el script previo a la implementación (script.predeployment.sql) el mejor lugar para poner comandos SQL que crean objetos de nivel de servidor (específicamente inicios de sesión en mi caso)?

Necesito crear inicios de sesión del servidor para los usuarios de la base de datos en el proyecto y este parece que el único lugar vagamente lógico para ponerlos como todo lo demás en la estructura del proyecto (creado desde la inversión de nuestro Dev DB) es específica de la base de datos. Por lo tanto, solo quería verificar dónde almacenan otros comandos de nivel de servidor cuando trabajan con proyectos de base de datos de Visual Studio.

Muchas gracias.

¿Fue útil?

Solución

Cualquier cosa que necesite antes de implementar su base de datos estaría en ese script.

En nuestro caso, agregamos inicios de sesión en el script posterior a la implementación. No son necesarios cuando implementamos la base de datos, y decidimos poner todos los comandos relacionados con la seguridad en el mismo lugar.

IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE name = N'$(DefaultLogin)')
BEGIN
    BEGIN TRY
        CREATE LOGIN [$(DefaultLogin)] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]
    END TRY
    BEGIN CATCH
        -- A try-catch is needed in case a user with a different name is created for the LOGIN specified.
    END CATCH
END
GO

IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'$(DefaultLogin)')
BEGIN
    BEGIN TRY
        CREATE USER [$(DefaultLogin)] FOR LOGIN [$(DefaultLogin)] WITH DEFAULT_SCHEMA=[dbo]
        -- The db_owner role is added to the current database.
        EXEC sp_addrolemember N'db_owner', N'$(DefaultLogin)'
    END TRY
    BEGIN CATCH
        -- A try-catch is needed in case a user with a different name is created for the LOGIN specified.
    END CATCH
END

Aquí es la referencia previa y posterior a la implementación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top