部署前脚本 (Script.PreDeployment.sql) 是放置创建服务器级对象(特别是在我的情况下是登录)的 sql 命令的最佳位置吗?
我需要为项目中的数据库用户创建服务器登录名,这似乎是唯一一个模糊逻辑的地方,因为项目结构中的所有其他内容(通过反转我们的开发数据库创建)都是特定于数据库的。因此,我只想检查其他人在使用 Visual Studio 数据库项目时将其服务器级命令存储在何处。
非常感谢。
部署前脚本 (Script.PreDeployment.sql) 是放置创建服务器级对象(特别是在我的情况下是登录)的 sql 命令的最佳位置吗?
我需要为项目中的数据库用户创建服务器登录名,这似乎是唯一一个模糊逻辑的地方,因为项目结构中的所有其他内容(通过反转我们的开发数据库创建)都是特定于数据库的。因此,我只想检查其他人在使用 Visual Studio 数据库项目时将其服务器级命令存储在何处。
非常感谢。
在部署数据库之前您需要的任何东西都在该脚本中。
在我们的例子中,我们在部署后脚本中添加登录。我们部署数据库时不需要它们,我们决定将所有与安全相关的命令放在同一个地方。
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
这是部署前和部署后参考。