2

我创建了一个包含用户的数据库项目:

TimTestUser.user.sql

CREATE USER [TimTestUser]
      FOR LOGIN [TimTestLogin]

并且还在服务器项目 TimTestLogin.login.sql 中创建了一个登录名

CREATE LOGIN TimTestLogin WITH PASSWORD = 'tim'

在我选择的 Database.sqldeployment 中:为目标数据库中的对象生成删除语句

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

更新:

当我部署数据库项目时,会生成 Revoke connect to [TimTestUser]

4

4 回答 4

2

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

这样做会在 Security 目录中创建一个 Permissions.sql 文件,其中包含每个用户的 GRANT 语句:

GRANT CONNECT TO [MyUser] AS [dbo];
于 2014-02-26T20:33:06.097 回答
1

我无法让上面的 sqlpermissions 解决方案正常工作。但是,向用户脚本添加授予权限语句对我有用。例如:

GRANT CONNECT TO [TimTestUser]

于 2012-10-30T13:10:45.773 回答
1

在尝试添加 GRANT CONNECT 作为部署后脚本,并在 SQL Server Management Studio 2014 中手动设置连接权限后尝试重新生成全新的 .sqlproj 后,我发现BunnyStrider是正确的:您必须添加 GRANT连接到 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] 已消失。

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

于 2015-09-01T21:12:08.193 回答
0

Sql server 在创建用户时隐式授予 Connect

CREATE USER [TimTestUser] 

db项目构建部署时,在Database.sqlpermissions文件中找不到CONNECT权限

解决方案是显式设置 Connect Database.sqlpermissions

<PermissionStatement Action ="GRANT">
  <Permission>CONNECT</Permission>
  <Grantee>TimTestUser</Grantee>
</PermissionStatement>
于 2012-08-15T10:28:31.283 回答