Создание сценариев объектов сервера в проекте базы данных Visual Studio 2010 - PullRequest
0 голосов
/ 17 июня 2011

Является ли сценарий перед развертыванием (Script.PreDeployment.sql) лучшим местом для размещения команд sql, которые создают объекты уровня сервера (в частности, учетные записи в моем случае)?

Мне нужно создать учетные записи сервера дляпользователи базы данных в проекте, и это, кажется, единственное смутно логичное место для размещения их, поскольку все остальное в структуре проекта (созданное путем обращения нашей базы данных dev) зависит от базы данных.Поэтому я просто хотел проверить, где другие хранят свои команды уровня сервера при работе с проектами баз данных Visual Studio.

Большое спасибо.

1 Ответ

3 голосов
/ 17 июня 2011

Все, что вам нужно до развертывания базы данных, будет в этом сценарии.

В нашем случае мы добавляем имена входа в сценарий после развертывания.Они не нужны при развертывании базы данных, и мы решили разместить все команды, связанные с безопасностью, в одном месте.

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

Здесь - это ссылка до и после развертывания.

...