2012-08-14 81 views
2

我创建了一个数据库项目与用户的用户:数据库项目与GenerateDropsIfNotInProject部署下降是在数据库项目

TimTestUser.user.sql

CREATE USER [TimTestUser] 
     FOR LOGIN [TimTestLogin] 

,也已经在服务器中创建一个登录项目 TimTestLogin.login.sql

CREATE LOGIN TimTestLogin WITH PASSWORD = 'tim' 

在Database.sqldeployment我已选择: 发电机密封e丢弃对象在目标数据库中的语句

当我部署数据库项目 时,用户被丢弃然后重新创建,这会导致登录到用户链接失败并且用户变成孤儿。

更新:

当我部署了DB项目撤销连接到产生

回答

0

的SQL Server创建用户

CREATE USER [TimTestUser] 

当DB时,项目建立隐含了授予连接[TimTestUser]并且部署时,它无法在Database.sqlpermissions文件中找到CONNECT权限。

解决方案s是明确设置连接Database.sqlpermissions

<PermissionStatement Action ="GRANT"> 
    <Permission>CONNECT</Permission> 
    <Grantee>TimTestUser</Grantee> 
</PermissionStatement> 
+0

您可以在位于Visual Sudio数据库项目的'属性'文件夹中的'Database.sqlpermissions'文件中编辑这些权限 – Sentient 2014-10-30 17:32:45

1

我不能得到上述sqlpermissions解决方案正常工作。然而,向用户脚本添加授权许可声明对我很有用。例如:

GRANT CONNECT TO [TimTestUser]

2

可以使用在Visual Studio 2013的SQL Server数据库项目通过检查导入数据库到项目时,“导入权限”选项(默认情况下未选中)时,避免此问题。

,否则会导致在包括用于每个用户的GRANT语句的安全目录下的文件Permissions.sql:

GRANT CONNECT TO [MyUser] AS [dbo]; 
+0

您可能有兴趣知道所描述的这种建议并不总是有效。导入绝对具有相关权限的数据库时,不会创建.sqlpermissions文件。我不明白为什么没有。 – 2015-04-09 15:41:53

+0

注意,我不得不在CREATE USER行下添加这行。将一个Permissions.sql文件添加到安全目录不起作用。我没有任何.sqlpermissions文件,我没有导入权限。 – BunnyStrider 2015-04-28 18:51:26

1

尝试添加GRANT CONNECT作为部署后脚本后,并试图在SQL Server Management Studio 2014中手动设置连接权限后重新生成全新的.sqlproj,我发现BunnyStrider是正确的:您必须将GRANT CONNECT添加到CREATE USER所在的同一脚本文件中。代码,所有文件都位于Security文件夹中名为TimTestUser.sql的一个文件中:

CREATE USER [TimTestUser] 
     FOR LOGIN [TimTestLogin]; 
GO 
GRANT CONNECT TO [TimTestUser]; 
GO 

然后,我通过删除包含GRANT CONNECT的导入向导生成的Permissions.sql以及我添加的部署后脚本,以及连接仍然有效来确认此代码。然后,我重新生成了部署脚本(双击* .Publish.xml文件并单击生成脚本),并验证REVOKE CONNECT TO [TimTestUser]消失了。

我们在Visual Studio 2012和SSDT 11.1.50717.0中使用SQL Server 2014。

相关问题