gpt4 book ai didi

sql-server - 错误: SQL71564 When migrating to Azure

转载 作者:行者123 更新时间:2023-12-02 09:28:21 24 4
gpt4 key购买 nike

我正在尝试第一次迁移到 Azure,但收到以下错误:

One or more unsupported elements were found in the schema used as part of a data package. Error SQL71564: Error validating element [develop]: The element [develop] has been orphaned from its login and cannot be deployed. (Microsoft.SqlServer.Dac)

我有点困惑,因为“develop”是我们用于测试的用户名,仅此而已。

背景:

  • 当前数据库在 SQL 2016 Express 上运行。
  • 我使用 Microsoft SQL Server Management Studio 2016(刚刚下载以确保是最新版本)进行迁移
  • 该架构是使用 Entity Framework /从 C# 类迁移创建的,因此我没有看到任何异常情况。
  • 所有表都有主键
  • 表之间没有依赖关系(全部通过代码完成)
  • 我在此数据库上运行 SQLAzureMW (5.15.6),没有发现任何错误(报告上的所有内容都是绿色的)。

最佳答案

这种孤立情况的一个常见问题是数据库恢复时。如果使用默认策略恢复数据库并且除了恢复命令之外不执行任何其他步骤,则在该恢复的数据库中创建的所有数据库用户也将被恢复。由于这些数据库用户没有登录名或与 SQL 登录名的连接已被切断,因此需要采取一些步骤来重新附加这些对象。

脚本

SET NOCOUNT ON
USE {your-db-name}
GO
DECLARE @loop INT
DECLARE @USER sysname
DECLARE @sqlcmd NVARCHAR(500) = ''

IF OBJECT_ID('tempdb..#Orphaned') IS NOT NULL
BEGIN
DROP TABLE #orphaned
END

CREATE TABLE #Orphaned (UserName sysname,IDENT INT IDENTITY(1,1))

INSERT INTO #Orphaned (UserName)
SELECT [name] FROM sys.database_principals WHERE [type] IN ('U','S') AND is_fixed_role = 0 AND [Name] NOT IN ('dbo','guest','sys','INFORMATION_SCHEMA')

IF(SELECT COUNT(*) FROM #Orphaned) > 0
BEGIN
SET @loop = 1
WHILE @loop <= (SELECT MAX(IDENT) FROM #Orphaned)
BEGIN
SET @USER = (SELECT UserName FROM #Orphaned WHERE IDENT = @loop)
IF(SELECT COUNT(*) FROM sys.server_principals WHERE [Name] = @USER) <= 0
BEGIN
IF EXISTS(SELECT 1 FROM sys.database_principals WHERE [Name] = @USER AND type_desc = 'WINDOWS_USER')
BEGIN
SET @sqlcmd = 'CREATE LOGIN [' + @USER + '] FROM WINDOWS'
Exec(@sqlcmd)
PRINT @sqlcmd
END
IF EXISTS(SELECT 1 FROM sys.database_principals WHERE [Name] = @USER AND type_desc = 'SQL_USER')
BEGIN
SET @sqlcmd = 'CREATE LOGIN [' + @USER + '] WITH PASSWORD = N''password'''
Exec(@sqlcmd)
PRINT @sqlcmd
END
END

SET @sqlcmd = 'ALTER USER [' + @USER + '] WITH LOGIN = [' + @USER + ']'
Exec(@sqlcmd)
PRINT @USER + ' link to DB user reset';
SET @loop = @loop + 1
END
END
SET NOCOUNT OFF

在脚本中,我们将数据库用户映射到 SQL 登录名,并将默认密码设置为“密码”。这可能不起作用,具体取决于 SQL Server 上设置的密码策略。请根据您的服务器策略更改默认密码。

引用

http://blogs.lessthandot.com/index.php/DataMgmt/DBAdmin/fixing-orphaned-database-users/

关于sql-server - 错误: SQL71564 When migrating to Azure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38857692/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com