기존 데이터베이스 (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를 놓치고 있냐?
데이터베이스의 스크립트를 생성하는 데 SQL의 '스크립트 생성'기능을 사용하지 않는 이유 – Boomer
@Boomer : a) 일회성 작업이 아니기 때문에 이것은 응용 프로그램 논리의 일부입니다. b) SSMS는 객체를 스크립팅하기 위해 동일한 'Transfer' 클래스를 사용하고, 앱 역할을 만들고 직접 스크립트를 생성합니다. – Dennis