2016-08-09 2 views
1

Я пытаюсь сделать свою первую миграцию в лазури, и я получаю следующее сообщение об ошибке:Ошибка: SQL71564 При миграции на 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)

Я немного запутался, так как «разработка» является имя пользователя, которое мы использовали для тестирования, ничего больше, не меньше.

фона:

  • В настоящее время БД работает на SQL 2016 Express.
  • Я использую Microsoft SQL Server Management Studio 2016 (только что загружен, чтобы быть уверенным в последней версии) для миграции
  • Схема была создана с использованием Entity Framework/миграции из классов C#, поэтому ничего необычного я не могу видеть.
  • Все таблицы имеют первичный ключ
  • Там нет зависимостей между таблицами (все это делается в коде)
  • Я побежал SQLAzureMW (5.15.6) на этой БД и не обнаружил никаких ошибок (все было зеленым по докладу).
+0

Если локальные пользователи вызвать проблемы при переходе на Azure, поскольку Логин будет меняться в зависимости от развертывания Azure? – DaveEP

ответ

0

Общей проблемой с этой сиротой является восстановление базы данных. Если база данных восстанавливается с использованием стратегии по умолчанию, и никаких шагов, кроме команды восстановления, не выполняются, все пользователи базы данных, созданные в этой восстановленной базе данных, также будут восстановлены. Поскольку у этих пользователей базы данных не было логина или соединение с логином SQL было отключено, необходимо предпринять шаги для повторного подключения этих объектов.

Script

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/

Смежные вопросы