【发布时间】: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"
当我部署这个项目时,在上面的脚本中创建的用户被删除然后重新创建,并且该用户的权限被撤销。在部署期间,该用户及其权限的生成取决于数据库中用户的状态。
如果存在具有datareader 和datawriter 权限的用户,则这些权限将被撤消,用户被删除,然后重新创建用户并且权限不会被删除。 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