部署前脚本(Script.PreDeployment.sql)是否是放置创建服务器级对象(在我的例子中是登录)的sql命令的最佳位置?
我需要为项目中的数据库用户创建服务器登录,这似乎是唯一一个模糊的逻辑位置来放置他们,因为项目结构中的其他一切(从反向我们的dev db创建)是特定于数据库的。因此,在使用Visual Studio数据库项目时,我只是想检查一下其他人存储服务器级命令的位置。
非常感谢。
发布于 2011-06-17 13:35:19
在部署数据库之前,您需要的任何东西都在该脚本中。
在我们的示例中,我们在部署后脚本中添加登录。我们在部署数据库时不需要它们,我们决定将所有与安全相关的命令放在同一位置。
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
Here是部署前和部署后参考。
https://stackoverflow.com/questions/6378538
复制