我在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"
当我部署此项目,是在上面的脚本创建的用户被删除,然后重新创建用户的权限被吊销。在部署期间,关于此用户及其权限生成的内容取决于数据库中用户的状态。
如果用户存在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 2013-03-08 15:15:37
@亚历山大,真是令人沮丧。而且看起来没有任何输入! – 2013-03-08 15:54:43