Автономные базы данныхContained Databases

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure 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 (динамические административные представления, XEvents и т. д.) предоставляет отчеты об автономности и может работать с ней.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 DATABASE и ALTER 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 Database EngineSQL 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 Database EngineSQL 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 2012 (11.x)SQL Server 2012 (11.x) , являются неавтономными.All databases in versions earlier than SQL Server 2012 (11.x)SQL Server 2012 (11.x) are non-contained. По умолчанию у всех баз данных в SQL Server 2012 (11.x)SQL Server 2012 (11.x) и более поздних версий параметр автономности установлен в значение NONE.By default, all SQL Server 2012 (11.x)SQL Server 2012 (11.x) 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.

  • Участники WindowsWindows 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 requires partial containment.

Важно!

Включение частично автономных баз данных передает управление над доступом к экземпляру 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.table, пользователи автономной базы данных с паролями, а также пользовательские таблицы в текущей базе данных, ссылаемые по двухкомпонентному имени.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 DatabasePartially 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_entities и sys.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.

Преимущества использования пользователей автономной базы данных в решениях AlwaysOnBenefit of Contained Database Users with Always On

Уменьшая привязку к экземпляру SQL ServerSQL Server, частично автономные базы данных могут быть полезны при отработке отказа, если используется Группы доступности AlwaysOnAlways 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 Группы доступности AlwaysOnAlways On availability groups.

Создание автономных пользователей позволяет им напрямую подключаться к автономной базе данных.Creating contained users enables the user to connect directly to the contained database. Это крайне важная функция в сценариях высокого уровня доступности и восстановления после аварии, например при использовании решения AlwaysOn.This is a very significant feature in high availability and disaster recovery scenarios such as in an Always On solution. Если пользователи являются автономными, то в случае отработки отказа они смогут подключиться к базе данных-получателю без создания имен входа на экземпляре, на котором она размещена.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. Дополнительные сведения см. в разделах Обзор групп доступности AlwaysOn (SQL Server) и Предварительные требования, ограничения и рекомендации для групп доступности AlwaysOn (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_usagedatabase_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