数据库项目在部署时删除权限

时间:2012-03-30 15:24:58

标签: visual-studio-2010 database-project

我在VS2010中有一个SQL 2005数据库项目。我有一个正在创建并授予数据库权限的用户。

Test.user.sql

CREATE USER [$(MachineName)\Test] FOR LOGIN [$(MachineName)\Test] WITH DEFAULT_SCHEMA = dbo;
GO
EXEC sp_addrolemember N'db_datawriter', N'$(MachineName)\Test'
GO
EXEC sp_addrolemember N'db_datareader', N'$(MachineName)\Test'
GO

我为$(MachineName)定义了一个SQLCMDVAR,它根据所选配置(Debug(Dev),QA,UAT,Production)保存机器的名称。在生成的SQL的顶部正确设置了此变量:

:setvar MachineName "TheMachineName"

部署此项目时,将删除上述脚本中创建的用户,然后重新创建该用户,并撤消该用户的权限。在部署期间,生成的有关此用户及其权限的内容取决于数据库中用户的状态。

如果用户存在datareaderdatawriter权限,则会撤消这些权限,删除用户,然后重新创建用户,而权限则不会。 Visual Studio在sp_addrolemember命令所在的位置添加了这一行:

PRINT N'Altering <unnamed>...';
GO
PRINT N'No script could be generated for operation 2 on object ''<unnamed>''.';
GO
PRINT N'Altering <unnamed>...';
GO
PRINT N'No script could be generated for operation 2 on object ''<unnamed>''.';
GO

如果我再次部署项目,则会正确生成权限并将其应用于用户:

PRINT N'Creating <unnamed>...';
GO
EXECUTE sp_addrolemember @rolename = N'db_datareader', @membername = N'$(MachineName)\Test';
GO
PRINT N'Creating <unnamed>...';
GO
EXECUTE sp_addrolemember @rolename = N'db_datawriter', @membername = N'$(MachineName)\Test';
GO

我无法弄清楚为什么会这样,有什么建议吗?

1 个答案:

答案 0 :(得分:1)

这是Visual Studio中的已知错误。请参阅vsts 2010 database deployment errorvsts 2010 database deployment error。有一些迹象表明这可以在Microsoft SQL Server Data Tools中修复。如果你在XP上,虽然SSDT需要Vista或更高版本才能安装,但你运气不好。