2017-12-11 14 views
1

마스터 키가있는 Microsoft Azure SQL 데이터베이스에서 데이터 계층 응용 프로그램을 추출 할 때 SQL Server로 가져올 수 없습니다. 내 로컬 PC. 답으로 제공된 단계 내 설치 작동하지 않았다 그러나 SSMS 2016 Error Importing Azure SQL v12 bacpac: master keys without password not supported마스터 키가있는 Azure에서 데이터 계층 응용 프로그램 (SQL 데이터베이스) 가져 오기 자동화

: 당신은 다른 사람을 찾을 수

여기에이 문제를 가지고 있었다. 단계는 입니다. 1. 서버 (또는 데이터베이스)에서 감사 기능을 비활성화하십시오. 2. DROP MASTER KEY 명령을 사용하여 데이터베이스 마스터 키를 삭제하십시오.

마이크로 소프트 기술 지원이 솔루션은 SQL 서버의 내 설치 작동하지 않았고 실제로 내 PC의 문제점 해결의 원격 제어를 복용 후, 들이이 발생하는 이유를 확인할 수 없습니다 확인했습니다.

bacpac 파일에서 마스터 키를 제거하는 방법을 찾아야했습니다. 나는 BACPAC 파일에서 마스터 키를 제거하기 위해 Powershell 스크립트를 가지고 있지만 추출하고, 파일 이름을 바꾸고, db를 가져 오기 위해 Windows Powershell에서 스크립트를 실행해야합니다.

누구나 마스터 키를 제거하고 단일 명령으로 Azure에서 SQL DB를 가져 오는 프로세스를 자동화하는 프로그램이나 스크립트 세트를 가지고 있습니까?

답변

0

이 포럼에 처음 오 셨습니다. 이 게시물에 열심히하지 마십시오. 나는 다른 사람들이 내가 함께 할 시간을 많이 절약 할 수 있도록 최선을 다하려고 노력하고있다.

Microsoft Azure SQL 데이터베이스에서 데이터 계층 응용 프로그램 (데이터베이스)을 추출하고 내 로컬의 데이터베이스로 가져 오기 위해 Windows Powershell 스크립트 (여러 소스로도 묶음)를 호출하는 T-SQL 스크립트를 함께 자수했습니다. ONE 명령을 실행하여 SQL Server를 실행합니다. 몇 달 동안 나는 다른 블로그 등의 스크립트에있는 코드 중 일부를 발견했습니다. 정보를 얻은 곳을 추적하지 못했기 때문에 그 사람들 때문에 신용을 제공 할 수 없었습니다. 이 글을 읽고 코드를 보았다면 신용을 얻으십시오. 나는 당신에게 당신의 일에 대한 기여도를 줄 수 없다는 것에 대해 사과드립니다.

전체 솔루션이 컴퓨터에 거의 액세스해야하므로 조정이 필요한 PC 및 로컬 SQL 서버의 구성 설정이있을 수 있습니다. 호환성 문제가 발생하는 경우 알려 주시면 도움이 될 수 있도록 최선을 다해 시스템 구성 방법을 알려 드리겠습니다. https://github.com/Wingloader/Auto-Azure-BACPAC-Download.git GetNewBacpac-forGitHub을 : 내가 여기 GitHub의 모든 일을 두 개의 파일을 배치 한 윈도우 10 프로 및 Microsoft SQL Server 개발자 (64 비트) v12.0.5207.0

을 사용하고

. SQL GetAzureDB-forGitHub.ps1


경고 : 파워 쉘 스크립트 파일이 SQL의 sa 암호 및 일반 텍스트에 푸른 SQL 로그인을 저장합니다!
이 작업을 수행하지 않으려면이 솔루션을 사용하지 마십시오.


내 컴퓨터가 전적으로 나를 소유하고 제어 그래서 나는 내 시스템의 보안을 열 수와 나는 그것을 보호의 책임을 기꺼이.

내 솔루션의 기본 단계는 다음과 같이 수행됩니다. (1 단계와 2 단계는 DB의 버전을 유지하면서 선택 사항으로, 현재는 깨끗한 프로덕션 사본 내 Azure DB의)

  1. 현재 DB를 MyLocalDB.bak로 백업합니다.
  2. 그래서 우리는 원래의 이름으로 DB를 다시 만들 수 있습니다 필요한 원래 MyLocalDB 데이터베이스 (삭제 (예 MyLocalDB20171231을)를 DB 이름 끝에 스탬프 전날에 새로운 DB로 1 단계에서 해당 백업을 복원 나중에)
  3. Azure에서 프로덕션 데이터베이스를 당겨 내고 이름이 MyLocalDB 인 새 데이터베이스를 작성하십시오.

원래의 DB 4 단계에서

의를 추출하는 작업 (당신이 데이터가 DB 이름을 참조 연결을 할 때 중요한 사항) 복원 된 DB는 원래 이름을 사용할 수 있도록 3 단계에서 삭제 푸른에서 데이터 계층 응용 프로그램 DB는 T-SQL에서이 선으로 시작됩니다 :

EXEC MASTER..xp_cmdshell '%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -File C:\Git\GetUpdatedAzureDB\GetAzureDB.ps1"' 

파워 쉘 스크립트는 다음을 수행합니다

  1. 추출 대상은 today.bacpac (하드 코드 된) 파일입니다. 가장 먼저해야 할 일은 이미 존재하는 파일을 삭제하는 것입니다.
  2. Azure에서 DB를 today.bacpac 파일로 추출하십시오.

참고 : Azure의 my DB에는 암호화를위한 마스터 키가 있습니다. 로컬 데이터베이스에 bacpac 파일을 가져 오기 전에이 파일을 제거해야합니다. 그렇지 않으면 실패합니다 (MS 지원과의 이전 대화에 따라 SQL 2017에서는 필요하지 않을 수도 있음). 마스터 키를 사용하지 않으면이 단계를 수행하는 코드를 제거하거나 그냥 그대로 둘 수 있습니다. 거기에 없으면 아무 것도 제거하지 않습니다. 프로그램에 약간의 오버 헤드가 추가됩니다.

  1. today.bacpac 파일 (zip 파일)을 열고 Origin.xml 파일에서 MasterKey 노드를 제거하십시오.
  2. SHA 해시 길이를 업데이트하도록 Model.xml 파일을 수정하십시오. 이것은 SQL이 bacpac 파일을 열 때 파일이 변조 된 것처럼 보이지 않도록하기 위해 필요합니다.
  3. 후 SQL 서버

    &C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin\SqlPackage.exe" /Action:Import /SourceFile:"C:\Git\GetUpdatedAzureDB\today-patched.bacpac" /TargetConnectionString:"Data Source=MyLocalSQLServer;User ID=sa; Password=MySAPassword; Initial Catalog=MyLocalDB; Integrated Security=false;" 
    

에 bacpac 파일을 가져 새 파일 오늘날 patched.bacpac

  • 를 실행합니다 (파워 쉘에서) 코드 줄에 다시 파일을 다시-참아 요 업데이트 된 경로, 사용자 이름 및 암호를 제공하기 위해 두 파일을 편집하고 SQL 스크립트를 실행합니다. 스크립트를 다시 편집 할 필요가 없습니다. 수정없이 SQL 스크립트를 다시 실행할 수 있으며 Azure DB의 새로운 복사본을 만듭니다.

    완료!