2012-12-07 2 views
1

기존 데이터베이스 (MS SQL 2012)에서 일종의 템플릿을 만들어야합니다. 템플릿은 스키마 (테이블, 인덱스, 역할 등)가 동일해야하지만 소스 DB의 데이터를 가져서는 안됩니다.비밀번호로 애플리케이션 역할을 이전하는 방법은 무엇입니까?

이렇게하려면 SMOO의 Transfer 클래스를 사용하고 있습니다. 현재 전송 설정은 다음과 같습니다.

 transfer.CopyAllObjects = true; 
     transfer.CopyAllSynonyms = true; 
     transfer.CopyData = false; 

     transfer.Options.WithDependencies = true; 
     transfer.Options.DriAll = true; 
     transfer.Options.Triggers = true; 
     transfer.Options.Permissions = true; 
     transfer.Options.Indexes = true; 
     transfer.Options.ContinueScriptingOnError = true; 
     transfer.Options.SchemaQualifyForeignKeysReferences = true; 
     transfer.Options.ExtendedProperties = true; 

원본 DB의 개체 중 하나가 응용 프로그램 역할입니다. 이 역할을 위해 생성 된 이전 스크립트는 다음과 같습니다.

/* To avoid disclosure of passwords, the password is generated in script. */ 
declare @idx as int 
declare @randomPwd as nvarchar(64) 
declare @rnd as float 
select @idx = 0 
select @randomPwd = N'' 
select @rnd = rand((@@CPU_BUSY % 100) + ((@@IDLE % 100) * 100) + 
     (DATEPART(ss, GETDATE()) * 10000) + ((cast(DATEPART(ms, GETDATE()) as int) % 100) * 1000000)) 
while @idx < 64 
begin 
    select @randomPwd = @randomPwd + char((cast((@rnd * 83) as int) + 43)) 
    select @idx = @idx + 1 
select @rnd = rand() 
end 
declare @statement nvarchar(4000) 
select @statement = N'CREATE APPLICATION ROLE [MyRole] WITH DEFAULT_SCHEMA = [dbo], ' + N'PASSWORD = N' + QUOTENAME(@randomPwd,'''') 
EXEC dbo.sp_executesql @statement 

질문 : 원본 DB의 암호를 사용하여이 역할을 이전하는 방법은 무엇입니까? 여기에이 "보안"이 필요하지 않습니다. 적절한 이전 옵션을 찾을 수 없습니다. 나는 somethig를 놓치고 있냐?

+0

데이터베이스의 스크립트를 생성하는 데 SQL의 '스크립트 생성'기능을 사용하지 않는 이유 – Boomer

+0

@Boomer : a) 일회성 작업이 아니기 때문에 이것은 응용 프로그램 논리의 일부입니다. b) SSMS는 객체를 스크립팅하기 위해 동일한 'Transfer' 클래스를 사용하고, 앱 역할을 만들고 직접 스크립트를 생성합니다. – Dennis

답변

2

SQL Server에서 메타 데이터에서 암호를 볼 수 없기 때문에 그렇게 할 방법이 없습니다. 따라서 응용 프로그램 역할을 전송할 때 새 역할을 지정해야합니다. 로그인과 대칭 및 비대칭 키의 다양한 속성에 대해서도 마찬가지입니다.

+0

예, 보안 저장 프로 시저를 자세히 살펴보면 동일한 결정을 내릴 수 있습니다. – Dennis

관련 문제