【问题标题】:Database Project Dropping Permissions On Deploy数据库项目在部署时删除权限
【发布时间】:2012-03-30 15:24:57
【问题描述】:

我在 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,它根据所选配置(调试(开发)、QA、UAT、生产)保存机器的名称。此变量在生成的 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

我不知道为什么会这样,有什么建议吗?

【问题讨论】:

  • 我刚刚遇到了类似的问题 - 直接从 VS 部署已经撤销了我所有用户的权限。
  • @Alex,真是令人沮丧。而且看起来没有任何输入!

标签: visual-studio-2010 database-project


【解决方案1】:

这是 Visual Studio 中的一个已知错误。请参阅 vsts 2010 database deployment errorvsts 2010 database deployment error。有迹象表明这可能在Microsoft SQL Server Data Tools 中得到修复。如果您使用的是 XP,那么您就不走运了,因为 SSDT 需要 Vista 或更高版本才能安装。

【讨论】:

  • 我已将一些数据库项目升级到 MSSQL Server Data Tools,但尚未确认此错误是否仍然存在。
猜你喜欢
  • 1970-01-01
  • 2013-06-13
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 2012-02-28
  • 1970-01-01
相关资源
最近更新 更多