当数据库具有Azure AD用户时,在Azure SQL数据库上部署Bacpac时出错

zzzyeukh  于 2023-05-18  发布在  其他
关注(0)|答案(2)|浏览(177)

我正在尝试将.bacpac部署到我的Azure订阅,数据库中有一些Azure AD用户。我可以使用SSMS生成.bacpac,但是当我在Azure上部署复制的数据库时,我得到了以下错误:
无法导入包。
错误SQL 72014:.Net SqlClient数据提供程序:
消息15419,第16层,状态1,第1行
提供的参数sid应为二进制(16)。
错误SQL 72045:脚本执行错误。执行的脚本:
CREATE USER [ADUser]
WITH SID =,TYPE = E;
(Microsoft.SqlServer.Dac)

**问题:**如果我的数据库中有Azure AD的用户,如何部署.bacpac

我做了一些测试来避免这个错误,我可以部署一个.bacpac文件与SQL Server用户,问题只有当数据库有Azure用户时才会出现。

r6hnlfcb

r6hnlfcb1#

同意**@AlwaysLearning**,根据本MS Document
使用SID创建用户仅适用于包含数据库中具有密码(SQL Server身份验证)的用户。
此外,你可以看到下面的错误我们不能使用SID与外部提供程序,它只适用于SQL用户密码。

您可以使用下面的命令在您的数据库中创建外部用户。

CREATE USER [username@domain.com] FROM EXTERNAL PROVIDER;

然后尝试在Azure SQL中部署数据库。

vmdwslir

vmdwslir2#

同意@pratik-lad和@AlwaysLearning,添加用户登录名,然后您可以部署.bacpac文件,但在我的情况下,我不希望Azure用户在新数据库中,所以我使用SQL Package为此编写了一个脚本。
首先提取带有/p:ExtractAllTableData=True标志的.dacpac文件

sqlpackage /Action:extract /p:IgnorePermissions=true /SourceConnectionString:"Data Source=Connection String" /TargetFile:"target.dacpac" /p:ExtractAllTableData=True

然后,您可以使用此标志ExcludeObjectTypes="Users;Logins;RoleMembership;Permissions;DatabaseRoles"发布数据库

sqlpackage /a:publish /tcs:"Data Source=Connection String" /sf:"./target.dacpac" /p:DatabaseEdition=Basic /p:DropObjectsNotInSource=True /p:ExcludeObjectTypes="Users;Logins;RoleMembership;Permissions;DatabaseRoles"

相关问题