데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

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/

 

 



강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
2010 재해복구를 위한 SQL Server 역할 가져오기 jevida(강성욱) 2017.01.11 2279
2009 비관리자 계정에 Profiler 실행 권한 부여하기 jevida(강성욱) 2017.01.11 3114
2008 SQL Server Agent 공유 일정 생성하기 jevida(강성욱) 2017.01.11 2146
2007 인덱스 리빌드는 통계를 업데이트 할까? jevida(강성욱) 2017.01.11 2325
2006 인덱스 유지관리 작업과 SQL Server 쿼리 성능 jevida(강성욱) 2017.01.11 3276
2005 네트워크 드라이브에 데이터베이스 복원하기 jevida(강성욱) 2017.01.11 4056
2004 확장 저장 프로시저를 활용한 논리디스크 용량 확인 jevida(강성욱) 2017.01.11 2448
2003 날짜 참조 테이블 만들기 jevida(강성욱) 2017.01.11 3026
2002 인덱스 상세 정보 확인 jevida(강성욱) 2017.01.11 3716
2001 DTC Transacntion 오버헤드 jevida(강성욱) 2017.01.11 1289
2000 대용량 로드를 위한 BULK INSERT 옵션 jevida(강성욱) 2017.01.11 5211
1999 SQL Server 2014 Diagnostic Information Queries jevida(강성욱) 2017.01.11 1608
» SQL Server 2012 Contained Database jevida(강성욱) 2017.01.11 1000
1997 SQL Server 2008R2 Diagnostic Information Queries jevida(강성욱) 2017.01.11 1420
1996 SQL Server 2005 Diagnostic Information Queries jevida(강성욱) 2017.01.11 1355
1995 601 Error, Could not continue scan with NOLOCK due to SQL Server data Movement jevida(강성욱) 2017.01.11 3642
1994 데이터베이스의 모든 인덱스 생성 삭제 스크립트 만들기 jevida(강성욱) 2017.01.11 1659
1993 SQL Server Spinlock 소개 jevida(강성욱) 2017.01.11 1584
1992 Ad-hoc 쿼리와 실행계획 jevida(강성욱) 2017.01.11 2569
1991 로그인 계정이 접근할 수 있는 데이터베이스 확인 jevida(강성욱) 2017.01.11 2989





XE Login