Visual Studio 2008 Database Edition - PullRequest
0 голосов
/ 24 апреля 2009

Управление входами на сервер и пользователями базы данных между рабочими станциями разработчиков и другими средами развертывания с использованием Visual Studio Team System Database Edition

Привет люди,

Глядя на воздержание от «Выпуск базы данных Visual Studio Team System 2008» в Выпуск базы данных Visual Studio Team System 2008 GDR R2 .

Параметризация в vstsdb, как правило, слабая, и нам пришлось применять обходные пути, чтобы заставить проекты БД развертываться локально на каждой рабочей станции разработчиков, чтобы они работали с базой данных приложения, когда они развертывали ее локально в соответствии с принципом песочницы. По сути, в самом начале, когда я импортировал базу данных приложения с использованием типа объекта мастера vstsdb import 2005, я просто удалил сгенерированные им пользовательские сценарии и должен был добавить сценарий предварительного развертывания входа в систему, управляемый переменными проекта, SQLCMD переменные могут использоваться только в этом специальном месте скрипта :( ...

Он работал как с логинами, так и с пользователями базы данных, а затем связывал их.

Выглядело примерно так ..

BEGIN TRY
    BEGIN TRANSACTION

        IF UPPER('$(DeployToDev)') = 'FALSE'
        BEGIN
            -- SMRBtsService
            IF EXISTS (SELECT * FROM master.dbo.syslogins WHERE loginname = N'$(DomainAppUserAccount)')
            DROP LOGIN [$(DomainAppUserAccount)] 
            CREATE LOGIN [$(DomainAppUserAccount)] FROM WINDOWS

            IF EXISTS (SELECT * FROM sys.database_principals WHERE NAME = 'SMRBtsService')
            DROP USER [SMRBtsService]
            CREATE USER [SMRBTSService] FOR LOGIN [$(DomainAppUserAccount)] WITH DEFAULT_SCHEMA=[dbo]

            -- WebUser
            IF EXISTS (SELECT * FROM master.dbo.syslogins WHERE loginname = N'$(DomainWebUserAccount)')
            DROP LOGIN [$(DomainWebUserAccount)] 
            CREATE LOGIN [$(DomainWebUserAccount)] FROM WINDOWS

            IF EXISTS (SELECT * FROM sys.database_principals WHERE NAME = 'WebUser')
            DROP USER [WebUser]
            CREATE USER [WebUser] FOR LOGIN [$(DomainWebUserAccount)] WITH DEFAULT_SCHEMA=[dbo]


        END
        ELSE IF UPPER('$(DeployToDev)') = 'TRUE'
        BEGIN
            -- BTSSERVICE
            IF EXISTS (SELECT * FROM master.dbo.syslogins WHERE loginname = N'$(COMPUTERNAME)\BTSSERVICE')
            DROP LOGIN [$(COMPUTERNAME)\BTSSERVICE] 
            CREATE LOGIN [$(COMPUTERNAME)\BTSSERVICE] FROM WINDOWS

            IF EXISTS (SELECT * FROM sys.database_principals WHERE NAME = 'SMRBtsService')
            DROP USER [SMRBtsService]
            CREATE USER [SMRBTSService] FOR LOGIN [$(COMPUTERNAME)\BTSSERVICE] WITH DEFAULT_SCHEMA=[dbo]

            -- WebUser
            IF EXISTS (SELECT * FROM master.dbo.syslogins WHERE loginname = N'$(COMPUTERNAME)\WebUser')
            DROP LOGIN [$(COMPUTERNAME)\WebUser] 
            CREATE LOGIN [$(COMPUTERNAME)\WebUser] FROM WINDOWS

            IF EXISTS (SELECT * FROM sys.database_principals WHERE NAME = 'WebUser')
            DROP USER [WebUser]
            CREATE USER [WebUser] FOR LOGIN [$(COMPUTERNAME)\WebUser] WITH DEFAULT_SCHEMA=[dbo]
        END 

    COMMIT TRANSACTION
END TRY
BEGIN CATCH

    IF (XACT_STATE()) <> 0
        ROLLBACK TRANSACTION

    DECLARE @ErrorMessage NVARCHAR(4000),
      @ErrorNumber INT,
      @ErrorSeverity INT,
      @ErrorState INT,
      @ErrorLine INT,
      @ErrorProcedure NVARCHAR(200) ;


    SELECT  @ErrorNumber = ERROR_NUMBER(), @ErrorSeverity = 20,
            @ErrorState = ERROR_STATE(), @ErrorLine = ERROR_LINE(),
            @ErrorProcedure = ISNULL(ERROR_PROCEDURE(), '-') ;


    SELECT  @ErrorMessage = N'Error %d, Level %d, State %d, Procedure %s, Line %d, ' +
            'Message: ' + ERROR_MESSAGE() ;

    RAISERROR (@ErrorMessage, @ErrorSeverity, 1, @ErrorNumber, -- parameter: original error number.
      @ErrorSeverity, -- parameter: 20, we want to stop the entire deploy process.
      @ErrorState, -- parameter: original error state.
      @ErrorProcedure, -- parameter: original error procedure name.
      @ErrorLine-- parameter: original error line number.
            ) ;


END CATCH

Вопрос *; 1018 *

Каким образом можно достичь такого рода функциональности, используя издание GDR, я вижу, что оно поддерживает концепцию объединения проектов в иерархию ссылок. И у вас есть два типа проекта, база данных и серверный проект. Но все же вам все еще нужно создать такой скрипт, чтобы добиться такой же динамической способности проекта развернуть на любой машине в режиме разработки?

Создание типа проекта сервера просто добавляет объекты сервера в дополнение ко всем объектам (сценариям) типа проекта базы данных.

Документация говорит о составных структурах проекта ... Но все же я не вижу очевидного решения.

1 Ответ

1 голос
/ 03 мая 2009

У нас также было немало проблем с VSDBCMD, Schema Compare и MSBuild Deployment, связанными с пользователями и входами в систему, а также с таргетингом на разные серверы.

Я настоятельно рекомендую вам установить RC2!

Следуйте инструкциям по установке (очень важно)!

Надеюсь, это поможет ... Дайте мне знать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...