Domanda

Lo script pre-distribuzione (script.predeployment.sql) è il posto migliore per mettere i comandi SQL che creano oggetti a livello di server (specificamente accedi nel mio caso)?

Devo creare accesso al server per gli utenti del database nel progetto e questo sembra l'unico luogo vagamente logico per metterli come tutto il resto nella struttura del progetto (creato dall'inversione del nostro Dev DB) è specifico del database. Volevo solo controllare dove altri archiviano i comandi a livello di server quando lavoravano con progetti di database Visual Studio.

Grazie molto.

È stato utile?

Soluzione

Tutto ciò di cui hai bisogno prima di distribuire il tuo database sarebbe in quello script.

Nel nostro caso, aggiungiamo accessi nello script di distribuzione post. Non sono necessari quando distribuiamo il database e abbiamo deciso di mettere tutti i comandi relativi alla sicurezza nello stesso posto.

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

Qui è il riferimento pre e post distribuzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top