포함된 데이터베이스Contained Databases

이 항목은 다음에 적용됩니다.예SQL Server(2012부터 시작)예Azure SQL Database아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO:yesSQL Server (starting with 2012)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

포함된 데이터베이스 는 다른 데이터베이스 및 해당 데이터베이스를 호스팅하는 SQL ServerSQL Server 인스턴스에서 격리된 데이터베이스입니다.A contained database is a database that is isolated from other databases and from the instance of SQL ServerSQL Server that hosts the database. SQL Server 2017SQL Server 2017 를 사용하여 인스턴스에서 데이터베이스를 격리하는 방법은 네 가지가 있습니다. helps user to isolate their database from the instance in 4 ways.

  • 데이터베이스를 설명하는 메타데이터는 대부분 데이터베이스에 유지됩니다.Much of the metadata that describes a database is maintained in the database. 메타데이터는 master 데이터베이스 대신 해당 데이터베이스에 유지되거나 두 데이터베이스 모두에 유지됩니다.(In addition to, or instead of, maintaining metadata in the master database.)

  • 모든 메타데이터는 동일한 데이터 정렬을 사용하여 정의됩니다.All metadata are defined using the same collation.

  • 데이터베이스를 통해 사용자 인증을 수행하여 SQL ServerSQL Server인스턴스의 로그인에 대한 데이터베이스 종속성을 줄일 수 있습니다.User authentication can be performed by the database, reducing the databases dependency on the logins of the instance of SQL ServerSQL Server.

  • SQL ServerSQL Server 환경은 포함 정보를 보고하며 그에 따라 조치를 취할 수 있습니다.The SQL ServerSQL Server environment (DMV's, XEvents, etc.) reports and can act upon containment information.

    메타데이터를 데이터베이스에 저장하는 등의 부분적으로 포함된 데이터베이스의 일부 기능은 모든 SQL Server 2017SQL Server 2017 데이터베이스에 적용됩니다.Some features of partially contained databases, such as storing metadata in the database, apply to all SQL Server 2017SQL Server 2017 databases. 데이터베이스 수준 인증 및 카탈로그 데이터 정렬 등의 부분적으로 포함된 데이터베이스의 일부 이점은 먼저 사용하도록 설정해야만 사용할 수 있습니다.Some benefits of partially contained databases, such as database level authentication and catalog collation, must be enabled before they are available. CREATE DATABASEALTER DATABASE 문을 사용하거나 SQL Server Management StudioSQL Server Management Studio를 사용하여 부분 포함을 사용하도록 설정할 수 있습니다.Partial containment is enabled using the CREATE DATABASE and ALTER DATABASE statements or by using SQL Server Management StudioSQL Server Management Studio. 부분 데이터베이스 포함을 사용하도록 설정하는 방법은 Migrate to a Partially Contained Database을 참조하십시오.For more information about how to enable partial database containment, see Migrate to a Partially Contained Database.

부분적으로 포함된 데이터베이스 개념 Partially Contained Database Concepts

전체적으로 포함된 데이터베이스는 데이터베이스를 정의하는 데 필요한 모든 설정과 메타데이터를 포함하며 데이터베이스가 설치된 SQL Server 데이터베이스 엔진SQL Server Database Engine 인스턴스와 어떠한 구성 종속 관계도 가지고 있지 않습니다.A fully contained database includes all the settings and metadata required to define the database and has no configuration dependencies on the instance of the SQL Server 데이터베이스 엔진SQL Server Database Engine where the database is installed. 이전 버전의 SQL ServerSQL Server에서 데이터베이스를 SQL ServerSQL Server 인스턴스와 분리하는 작업은 시간이 많이 걸릴 수 있으며 이 작업을 위해서는 데이터베이스와 SQL ServerSQL Server인스턴스 간 관계를 자세히 알고 있어야 합니다.In previous versions of SQL ServerSQL Server, separating a database from the instance of SQL ServerSQL Server could be time consuming and required detailed knowledge of the relationship between the database and the instance of SQL ServerSQL Server. 부분적으로 포함된 데이터베이스를 사용하면 데이터베이스를 SQL ServerSQL Server 인스턴스 및 다른 데이터베이스와 쉽게 분리할 수 있습니다.Partially contained databases make it easier to separate a database from the instance of SQL ServerSQL Server and other databases.

포함된 데이터베이스는 포함과 관련된 기능을 고려합니다.The contained database considers features with regard to containment. 데이터베이스에 있는 기능에만 의존하는 사용자 정의 엔터티는 완전히 포함된 것으로 간주됩니다.Any user-defined entity that relies only on functions that reside in the database is considered fully contained. 데이터베이스 외부의 기능에 의존하는 사용자 정의 엔터티는 포함되지 않은 것으로 간주됩니다.Any user-defined entity that relies on functions that reside outside the database is considered uncontained. 자세한 내용은 이 항목의 뒷부분에 나오는 포함 섹션을 참조하세요.(For more information, see the Containment section later in this topic.)

다음 용어는 포함된 데이터베이스 모델에 적용됩니다.The following terms apply to the contained database model.

데이터베이스 경계Database boundary
데이터베이스와 SQL ServerSQL Server인스턴스 사이의 경계입니다.The boundary between a database and the instance of SQL ServerSQL Server. 데이터베이스와 다른 데이터베이스 사이의 경계입니다.The boundary between a database and other databases.

포함됨Contained
데이터베이스 경계 내에 전체가 포함되는 요소입니다.An element that exists entirely in the database boundary.

포함되지 않음Uncontained
데이터베이스 경계를 넘는 요소입니다.An element that crosses the database boundary.

포함되지 않은 데이터베이스Non-contained database
포함이 NONE으로 설정된 데이터베이스입니다.A database that has containment set to NONE. SQL Server 2012SQL Server 2012 이전 버전의 모든 데이터베이스는 포함되지 않은 데이터베이스입니다.All databases in versions earlier than SQL Server 2012SQL Server 2012 are non-contained. 기본적으로 모든 SQL Server 2012SQL Server 2012 이상 데이터베이스는 포함이 NONE으로 설정되어 있습니다.By default, all SQL Server 2012SQL Server 2012 and later databases have a containment set to NONE.

부분적으로 포함된 데이터베이스Partially contained database
부분적으로 포함된 데이터베이스는 데이터베이스 경계를 넘는 일부 기능을 허용할 수 있는 포함된 데이터베이스입니다.A partially contained database is a contained database that can allow some features that cross the database boundary. SQL ServerSQL Server 에는 포함 경계가 교차할 때 확인할 수 있는 기능이 있습니다. includes the ability to determine when the containment boundary is crossed.

포함된 사용자Contained user
포함된 데이터베이스에는 두 가지 유형의 사용자가 있습니다.There are two types of users for contained databases.

  • 암호가 있는 포함된 데이터베이스 사용자Contained database user with password

    암호가 있는 포함된 데이터베이스 사용자는 데이터베이스에 의해 인증됩니다.Contained database users with passwords are authenticated by the database. 자세한 내용은 포함된 데이터베이스 사용자 - 이식 가능한 데이터베이스 만들기를 참조하세요.For more information, see Contained Database Users - Making Your Database Portable.

  • Windows 보안 주체Windows principals

    권한이 있는 Windows 사용자 및 권한이 있는 Windows 그룹의 멤버는 데이터베이스에 직접 연결할 수 있으며 master 데이터베이스의 로그인이 필요하지 않습니다.Authorized Windows users and members of authorized Windows groups can connect directly to the database and do not need logins in the master database. 데이터베이스는 Windows에 의한 인증을 신뢰합니다.The database trusts the authentication by Windows.

    master 데이터베이스의 로그인을 기반으로 하는 사용자는 포함된 데이터베이스에 대한 액세스 권한을 부여받을 수 있지만 이렇게 하면 SQL ServerSQL Server 인스턴스에 대한 종속성이 생깁니다.Users based on logins in the master database can be granted access to a contained database, but that would create a dependency on the SQL ServerSQL Server instance. 따라서 로그인을 기반으로 하는 사용자를 만드는 경우 부분적으로 포함된 데이터베이스에 대한 설명을 참조하십시오.Therefore, creating users based on logins see comment for partially contained databases.

중요

부분적으로 포함된 데이터베이스를 사용하도록 설정하면 SQL ServerSQL Server 인스턴스에 대한 액세스 제어 권한이 데이터베이스 소유자에게 위임됩니다.Enabling partially contained databases delegates control over access to the instance of SQL ServerSQL Server to the owners of the database. 자세한 내용은 Security Best Practices with Contained Databases를 참조하세요.For more information, see Security Best Practices with Contained Databases.

데이터베이스 경계Database Boundary
부분적으로 포함된 데이터베이스는 인스턴스의 기능에서 데이터베이스 기능을 분리하므로 이 두 요소 사이에 데이터베이스 경계라는 명확히 정의된 선이 있습니다.Because partially contained databases separate the database functionality from those of the instance, there is a clearly defined line between these two elements called the database boundary.

데이터베이스 경계 내부에는 데이터베이스 모델이 있으며 여기에서 데이터베이스가 개발되고 관리됩니다.Inside of the database boundary is the database model, where the databases are developed and managed. 데이터베이스 내부에 있는 엔터티에는 sys.tables와 같은 시스템 테이블, 암호가 있는 포함된 데이터베이스 사용자, 두 부분으로 구성된 이름으로 참조되는 현재 데이터베이스의 사용자 테이블 등이 있습니다.Examples of entities located inside of the database include, system tables like sys.tables, contained database users with passwords, and user tables in the current database referenced by a two-part name.

데이터베이스 경계의 외부에는 관리 모델이 있으며 이 모델은 인스턴스 수준 기능 및 관리와 관련되어 있습니다.Outside of the database boundary is the management model, which pertains to instance-level functions and management. 데이터베이스 경계 외부에 있는 엔터티에는 sys.endpoints와 같은 시스템 테이블, 로그인에 매핑된 사용자, 세 부분으로 구성된 이름으로 참조되는 다른 데이터베이스의 사용자 테이블 등이 있습니다.Examples of entities located outside of the database boundary include, system tables like sys.endpoints, users mapped to logins, and user tables in another database referenced by a three-part-name.

포함 Containment

전적으로 데이터베이스 내부에 있는 사용자 엔터티는 포함된것으로 간주됩니다.User entities that reside entirely within the database are considered contained. 데이터베이스 외부에 있거나 데이터베이스 외부 기능과의 상호 작용에 의존하는 사용자 엔터티는 포함되지 않은것으로 간주됩니다.Any entities that reside outside of the database, or rely on interaction with functions outside of the database, are considered uncontained.

일반적으로 사용자 엔터티는 다음과 같은 포함 범주로 분류됩니다.In general, user entities fall into the following categories of containment:

  • sys.indexes와 같이 데이터베이스 경계를 넘지 않는, 완전히 포함된 사용자 엔터티.Fully contained user entities (those that never cross the database boundary), for example sys.indexes. 이러한 기능을 사용하는 모든 코드 또는 이러한 엔터티만 참조하는 모든 개체도 완전히 포함된 것으로 간주됩니다.Any code that uses these features or any object that references only these entities is also fully contained.

  • sys.server_principals 또는 서버 보안 주체(로그인)와 같이 데이터베이스 경계를 넘는, 포함되지 않은 사용자 엔터티.Uncontained user entities (those that cross the database boundary), for example sys.server_principals or a server principal (login) itself. 이러한 엔터티를 사용하는 모든 코드 또는 이러한 엔터티를 참조하는 모든 기능은 포함되지 않은 것으로 간주됩니다.Any code that uses these entities or any functions that references these entities are uncontained.

Partially Contained Database Partially Contained Database

포함된 데이터베이스 기능은 현재 부분적으로 포함된 상태에서만 사용할 수 있습니다.The contained database feature is currently available only in a partially contained state. 부분적으로 포함된 데이터베이스는 포함되지 않은 기능을 사용하도록 허용하는 포함된 데이터베이스입니다.A partially contained database is a contained database that allows the use of uncontained features.

포함되지 않은 개체 또는 기능에 대한 정보를 반환하려면 sys.dm_db_uncontained_entitiessys.sql_modules(Transact-SQL) 뷰를 사용하세요.Use the sys.dm_db_uncontained_entities and sys.sql_modules (Transact-SQL) view to return information about uncontained objects or features. 데이터베이스 요소의 포함 상태를 파악함으로써 포함 상태를 승격시키려면 어떤 개체 또는 기능을 바꾸거나 변경해야 하는지 확인할 수 있습니다.By determining the containment status of the elements of your database, you can discover what objects or features must be replaced or altered to promote containment.

중요

일부 개체는 기본 포함 설정이 NONE이므로 이 뷰는 거짓 긍정을 반환할 수 있습니다.Because certain objects have a default containment setting of NONE, this view can return false positives.

부분적으로 포함된 데이터베이스의 동작은 포함되지 않은 데이터베이스의 동작과 데이터 정렬의 측면에서 가장 많이 다릅니다.The behavior of partially contained databases differs most distinctly from that of non-contained databases with regard to collation. 데이터 정렬 문제에 대한 자세한 내용은 Contained Database Collations을 참조하십시오.For more information about collation issues, see Contained Database Collations.

부분적으로 포함된 데이터베이스 사용의 이점 Benefits of using Partially Contained Databases

부분적으로 포함된 데이터베이스를 사용하면 포함되지 않은 데이터베이스와 관련된 일부 문제 및 복잡성을 해결할 수 있습니다.There are issues and complications associated with the non-contained databases that can be resolved by using a partially contained database.

데이터베이스 이동Database Movement

데이터베이스를 이동할 때 발생하는 문제 중 하나는 인스턴스 간에 데이터베이스를 이동하면 일부 중요한 정보를 사용할 수 없게 된다는 점입니다.One of the problems that occurs when moving databases, is that some important information can be unavailable when a database is moved from one instance to another. 예를 들어 로그인 정보가 데이터베이스 대신 인스턴스 내에 저장되어 있는 경우,For example, login information is stored within the instance instead of in the database. 포함되지 않은 데이터베이스를 SQL ServerSQL Server의 한 인스턴스에서 다른 인스턴스로 이동하면 이러한 정보는 남겨집니다.When you move a non-contained database from one instance to another instance of SQL ServerSQL Server, this information is left behind. 그러면 누락된 데이터를 식별하여 데이터베이스와 함께 새 SQL ServerSQL Server인스턴스로 이동해야 합니다.You must identify the missing information and move it with your database to the new instance of SQL ServerSQL Server. 이 프로세스는 시간이 많이 걸리며 어려울 수 있습니다.This process can be difficult and time-consuming.

부분적으로 포함된 데이터베이스는 중요 정보를 데이터베이스에 저장할 수 있으므로 데이터베이스를 이동한 후에도 데이터베이스에 정보가 그대로 있습니다.The partially contained database can store important information in the database so the database still has the information after it is moved.

참고

부분적으로 포함된 데이터베이스는 인스턴스에서 분리할 수 없는 데이터베이스에서 사용하는 기능을 설명하는 설명서를 제공합니다.A partially contained database can provide documentation describing those features that are used by a database that cannot be separated from the instance. 여기에는 서로 관련된 다른 데이터베이스 목록, 데이터베이스에 필요하지만 포함할 수 없는 시스템 설정 등이 포함됩니다.This includes a list of other interrelated databases, system settings that the database requires but cannot be contained, and so on.

Always On을 사용하는 포함된 데이터베이스 사용자의 이점Benefit of Contained Database Users with Always On

SQL ServerSQL Server인스턴스와의 관련성을 줄이면 Always On 가용성 그룹Always On availability groups을 사용할 때 장애 조치 중에 부분적으로 포함된 데이터베이스가 유용할 수 있습니다.By reducing the ties to the instance of SQL ServerSQL Server, partially contained databases can be useful during failover when you use Always On 가용성 그룹Always On availability groups.

포함된 사용자를 만들면 사용자가 포함된 데이터베이스에 직접 연결할 수 있습니다.Creating contained users enables the user to connect directly to the contained database. 이 기능은 Always On 솔루션과 같은 고가용성 및 재해 복구 시나리오에서 매우 중요한 기능입니다.This is a very significant feature in high availability and disaster recovery scenarios such as in an Always On solution. 사용자가 포함된 사용자인 경우 장애 조치(failover) 시 보조 복제본을 호스팅하는 인스턴스에 대한 로그인을 만들지 않고도 보조 복제본에 연결할 수 있습니다.If the users are contained users, in case of failover, people would be able to connect to the secondary without creating logins on the instance hosting the secondary. 이는 즉각적인 이점을 제공합니다.This provides an immediate benefit. 자세한 내용은 Always On 가용성 그룹 개요(SQL Server)Always On 가용성 그룹에 대한 필수 조건, 제한 사항 및 권장 사항(SQL Server)을 참조하세요.For more information, see Overview of Always On Availability Groups (SQL Server) and Prerequisites, Restrictions, and Recommendations for Always On Availability Groups (SQL Server).

초기 데이터베이스 개발Initial Database Development

개발자는 새 데이터베이스가 배포될 위치를 알지 못할 수 있으므로 데이터베이스에 대한 배포 환경의 영향을 제한하면 개발자의 작업이 더 쉬워질 수 있습니다.Because a developer may not know where a new database will be deployed, limiting the deployed environmental impacts on the database lessens the work and concern for the developer. 포함되지 않은 모델에서 개발자는 새 데이터베이스 및 프로그램에 대해 가능한 환경적 영향을 고려해야 합니다.In the non-contained model, the developer must consider possible environmental impacts on the new database and program accordingly. 하지만 개발자는 부분적으로 포함된 데이터베이스를 사용하여 데이터베이스에 대한 인스턴스 수준의 영향과 인스턴스 수준에서 개발자가 고려해야 할 요소를 검색할 수 있습니다.However, by using partially contained databases, developers can detect instance-level impacts on the database and instance-level concerns for the developer.

데이터베이스 관리Database Administration

데이터베이스 설정을 master 데이터베이스 대신 데이터베이스에 유지하면 데이터베이스 소유자에게 sysadmin 권한을 제공할 필요 없이 각 데이터베이스 소유자가 해당 데이터베이스를 더 세밀하게 제어할 수 있습니다.Maintaining database settings in the database, instead of in the master database, lets each database owner have more control over their database, without giving the database owner sysadmin permission.

제한 사항 Limitations

부분적으로 포함된 데이터베이스는 다음 기능을 허용하지 않습니다.Partially contained databases do not allow the following features.

  • 부분적으로 포함된 데이터베이스는 복제, 변경 데이터 캡처 또는 변경 내용 추적 기능을 사용할 수 없습니다.Partially contained databases cannot use replication, change data capture, or change tracking.

  • 번호를 매긴 프로시저Numbered procedures

  • 데이터 정렬이 변경된 기본 제공 기능에 종속된 스키마 바운드 개체Schema-bound objects that depend on built-in functions with collation changes

  • 개체, 열, 기호 또는 유형에 대한 참조를 비롯하여 데이터 정렬 변경의 결과로 발생하는 바인딩 변경Binding change resulting from collation changes, including references to objects, columns, symbols, or types.

  • 복제, 변경 데이터 캡처 및 변경 내용 추적Replication, change data capture, and change tracking.

경고

임시 저장 프로시저는 현재 허용되지만,Temporary stored procedures are currently permitted. 포함 조건을 위반하므로 이후 버전의 포함된 데이터베이스에서는 지원되지 않을 것입니다.Because temporary stored procedures breach containment, they are not expected to be supported in future versions of contained database.

데이터베이스 포함 식별 Identifying Database Containment

데이터베이스의 포함 상태를 식별할 수 있는 도구가 두 가지 있습니다.There are two tools to help identify the containment status of the database. sys.dm_db_uncontained_entities(Transact-SQL)는 데이터베이스에서 포함되지 않은 엔터티일 가능성이 있는 엔터티를 모두 표시하는 뷰입니다.The sys.dm_db_uncontained_entities (Transact-SQL) is a view that shows all the potentially uncontained entities in the database. 런타임 시 실제로 포함되지 않은 엔터티가 식별될 때 database_uncontained_usage 이벤트가 발생합니다.The database_uncontained_usage event occurs when any actual uncontained entity is identified at run time.

sys.dm_db_uncontained_entitiessys.dm_db_uncontained_entities

이 뷰는 데이터베이스 경계를 넘는 엔터티와 같이 포함되지 않은 엔터티가 될 가능성이 있는 데이터베이스의 엔터티를 보여 줍니다.This view shows any entities in the database that have the potential to be uncontained, such as those that cross-the database boundary. 여기에는 데이터베이스 모델 외부 개체를 사용할 수 있는 사용자 엔터티가 포함됩니다.This includes those user entities that may use objects outside the database model. 그러나 런타임이 될 때까지 일부 엔터티(예: 동적 SQL을 사용하는 엔터티)의 포함을 확인할 수 없기 때문에 이 뷰에서 실제로는 포함되지 않은 엔터티가 아닌 일부 엔터티를 보여 줄 수 있습니다.However, because the containment of some entities (for example, those using dynamic SQL) cannot be determined until run time, the view may show some entities that are not actually uncontained. 자세한 내용은 sys.dm_db_uncontained_entities(Transact-SQL)를 참조하세요.For more information, see sys.dm_db_uncontained_entities (Transact-SQL).

database_uncontained_usage 이벤트database_uncontained_usage event

XEvent는 런타임 시 포함되지 않은 엔터티가 식별될 때마다 발생합니다.This XEvent occurs whenever an uncontained entity is identified at run time. 여기에는 클라이언트 코드에서 시작된 엔터티가 포함됩니다.This includes entities originated in client code. 이 XEvent는 실제로 포함되지 않은 엔터티에 대해서만 발생합니다.This XEvent will occur only for actual uncontained entities. 그러나 이벤트는 런타임에만 발생합니다.However, the event only occurs at run time. 따라서 실행하지 않은, 포함되지 않은 모든 사용자 엔터티는 이 XEvent에서 식별되지 않습니다.Therefore, any uncontained user entities you have not run will not be identified by this XEvent

참고 항목See Also

수정된 기능(포함된 데이터베이스) Modified Features (Contained Database)
Contained Database Collations Contained Database Collations
Security Best Practices with Contained Databases Security Best Practices with Contained Databases
Migrate to a Partially Contained Database Migrate to a Partially Contained Database
포함된 데이터베이스 사용자 - 이식 가능한 데이터베이스 만들기 Contained Database Users - Making Your Database Portable