SQL Server/SQL Server Tip

SQL Server 2012 Contained Database

SungWookKang 2015. 7. 23. 10:30
반응형

SQL Server 2012 Contained Database

 

  • Version : SQL Server 2012

 

SQL Server 2012에서 제공되는 Contained Database(포함된 데이터베이스)는 다른 데이터베이스 및 해당 데이터베이스를 호스팅하는 SQL Server 인스턴스에서 격리된 데이터베이스이다.

 

SQL Server 2012 인스턴스에서 데이터베이스를 격리하는 방법은 네 가지가 있다.

  • 데이터베이스를 설명하는 메타데이터는 대부분 데이터베이스에 유지된다. 메타데이터는 master 데이터베이스 대신 해당 데이터베이스에 유지되거나 두 데이터베이스 모두에 유지된다.
  • 모든 메타데이터는 동일한 데이터 정렬을 사용하여 정의된다.
  • 데이터베이스를 통해 사용자 인증을 수행하여 SQL Server 인스턴스의 로그인에 대한 데이터베이스 종속성을 줄일 수 있다.
  • SQL Server 환경은 포함 정보를 보고하며 그에 따라 조치를 취할 수 있다.

 

전체적으로 포함된 데이터베이스는 데이터베이스를 정의하는 데 필요한 모든 설정과 메타데이터를 포함하며 데이터베이스가 설치된 SQL Server 데이터베이스 엔진 인스턴스와 어떠한 구성 종속 관계도 가지고 있지 않다. 이전 버전의 SQL Server에서 데이터베이스를 SQL Server 인스턴스와 분리하는 작업은 시간이 많이 걸릴 수 있으며 이 작업을 위해서는 데이터베이스와 SQL Server 인스턴스 관계를 자세히 알고 있어야 한다.

 

SQL Server 2012에서 부분적으로 포함된 데이터베이스를 사용하면 데이터베이스를 SQL Server 인스턴스 및 다른 데이터베이스와 쉽게 분리 할 수 있다.

 

[부분적으로 포함된 데이터베이스 사용의 이점]

부분적으로 포함된 데이터베이스를 사용하면 포함되지 않은 데이터베이스와 관련된 일부 문제 및 복잡성을 해결 할 수 있다.

  • 데이터베이스 이동 이점 : 데이터베이스를 이동 할 때 발생하는 문제 중 하나는 인스턴스 간에 데이터베이스를 이동하면서 로그인 정보와 같은 일부 중요한 정보를 사용할 수 없게 된다는 점이다. 부분적으로 포함된 데이터베이스는 중요 정보를 데이터베이스에 저장할 수 있으므로 데이터베이스를 이동한 후에도 데이터베이스에 정보가 그대로 있다.
  • AlwaysOn을 사용하는 포함된 데이터베이스 사용자 이점 : SQL Serve 인스턴스와의 관련성을 줄이면 AlwaysOn 가용성 그룹을 사용할 때 장애조치 중에 부분적으로 포함된 데이터베이스가 유용할 수도 있다. 포함된 사용자를 만들면 사용자가 포함된 데이터베이스에 직접 연결할 수 있다. 사용자가 포함된 사용자인 경우 장애조치 시 보조 복제본을 호스팅하는 인스턴스에 대한 로그인을 만들지 않고도 보조 복제본에 연결 할 수 있다.
  • 초기 데이터베이스 개발 이점 : 개발자는 새 데이터베이스의 배포 위치를 알지 못할 수 있으므로 데이터베이스에 대한 배포 환경의 영향을 제한하면 개발자의 작업이 더 쉬워질 수 있다.
  • 데이터베이스 관리 이점 : 데이터베이스 설정을 master 데이터베이스 대신 데이터베이스에 유지하면 데이터베이스 소유자에게 sysadmin 권한을 제공할 필요 없이 각 데이터베이스 소유자가 해당 데이터베이스를 더 세밀하게 제어 할 수 있다.

 

[제한 사항]

  • 부분적으로 포함된 데이터베이스는 복제, 변경 데이터 캡처 또는 변경 내용 추적기능을 사용할 수 없다.
  • 번호를 매긴 프로시저
  • 데이터 정렬이 변경된 기본 제공 기능에 종속된 스키마 바운드 개체
  • 개체, 열, 기호 또는 유형에 대한 참조를 비롯하여 데이터 정렬 변경의 결과로 발생하는 바인딩 변경
  • 복제, 변경 데이터 캡처 및 변경 내용 추적

 

 

다음 실습을 통하여 포함된 데이터베이스를 만들어 보자.

 

SQL Server 2012 인스턴스 에서 포함된 데이터베이스 기능을 사용하려면 아래의 T-SQL 코드를 실행 한다.

Use master

GO

sp_configure 'show advanced options', 1

GO

RECONFIGURE WITH OVERRIDE

GO

sp_configure 'contained database authentication', 1

GO

RECONFIGURE WITH OVERRIDE

GO

sp_configure 'show advanced options', 0

GO

RECONFIGURE WITH OVERRIDE

GO

 

SSMS에서 데이터베이스를 생성한다. 이때 데이터베이스 생성 창에서 [옵션] 탭에서 [포함 유형]을 [부분]으로 선택 하여 생성한다.

 

T-SQL을 사용하여 생성 할 경우에는 다음과 같다.

Use master

GO

CREATE DATABASE [ContainedDB]

CONTAINMENT = PARTIAL

ON PRIMARY

(

NAME = N'ContainedDB',

FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\ContainedDB.mdf' ,

SIZE = 3072KB ,

FILEGROWTH = 1024KB

)

LOG ON

(

NAME = N'ContainedDB_log',

FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\ContainedDB_log.ldf' ,

SIZE = 1024KB ,

FILEGROWTH = 10%

)

GO

 

 

포함된 데이터베이스가 생성되었으면 액세스 할 수 있는 사용자 계정을 생성한다. 개체 탐색기에서 [ContainedDB] – [보안]에서 마우스 오른쪽을 클릭하여 [새 사용자]를 선택 한다.

 

사용자 유형을 선택하고 사용자 이름 및 비밀번호를 입력 한다.

 

T-SQL을 이용한 사용자 생성은 다음과 같다.

USE [ContainedDB]

GO

CREATE USER [ContainedDBUser] WITH PASSWORD=N'Contained$DBUser@5',

DEFAULT_LANGUAGE=[English],

DEFAULT_SCHEMA=[dbo]

GO

 

계정 생성이 완료 되었으면 로그인을 시도해 본다. 연결 속성 탭에서 데이터베이스 연결에서 아래 그림과 같이 포함된 데이터베이스를 선택한다.

 

 

ContainedDBUser 계정을 사용하여 ContainedDB에 접속을 확인 하였다.

 

 

SA등의 계정을 사용하여 SQL Server 인스턴스에 접속하여 보안을 확인해 보자. ContaintedDB에 대한 사용자를 볼 수 없다.

 

 

[참고 자료]

http://www.mssqltips.com/sqlservertip/2428/sql-server-2012-contained-database-feature/

 

 

2014-02-04 / 강성욱 / http://sqlmvp.kr

 

반응형