2012-03-30 37 views
1

我在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保持取决于所选择的配置(调试(DEV),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 

我想不出为什么发生这种情况,有什么建议?

+0

我刚刚有一个类似的问题 - 直接从VS部署已取消了我所有的用户的权限。 – Alex 2013-03-08 15:15:37

+0

@亚历山大,真是令人沮丧。而且看起来没有任何输入! – 2013-03-08 15:54:43

回答