Базы данных, содержащиеся в SQL Server

В этом руководстве вы узнаете об автономных базах данных SQL Server и о том, как создать автономную базу данных с помощью T-SQL.

Введение в базу данных SQL Server

Автономная база данных — это автономная база данных, которая имеет собственные метаданные, настройки базы данных и конфигурации и не зависит от экземпляра SQL Server, на котором она размещена.

Используя автономную базу данных, вы можете перенести ее на другой сервер, не создавая никаких проблем с безопасностью, а также не создавая лишних SQL-логинов.

Чтобы создать пользователя для обычной базы данных, необходимо сначала создать логин, который подключается к главной базе данных:

CREATE LOGIN login_name 
WITH PASSWORD = 'strong_password';

А затем создайте пользователя, который подключается к базе данных пользователей:

CREATE USER 'user_name' 
FOR LOGIN 'login_name'; 

Если вы хотите изменить пароль пользователя, вам необходимо изменить пароль входа:

ALTER LOGIN login_name 
WITH PASSWORD = 'strong_password'; 

При перемещении базы данных на другой экземпляр SQL Server необходимо создать то же имя входа из текущего экземпляра SQL Server в новом экземпляре SQL Server и сопоставить пользователя с вновь созданным именем входа.

Однако, если вы используете автономную базу данных, вы можете напрямую создать пользователя, который подключается к базе данных пользователей:

CREATE USER user_name 
WITH PASSWORD = 'strong_password';

При перемещении базы данных на другой экземпляр SQL Server вам необходимо использовать то же имя пользователя для подключения к базе данных.

Чтобы изменить пароль, вы можете напрямую изменить пароль пользователя следующим образом:

ALTER USER user_name 
WITH PASSWORD = 'strong_password';

Создание автономной базы данных

Сначала включите функцию сдерживания на уровне экземпляра SQL Server с помощью хранимой процедуры sp_configure:

USE master
GO
sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
sp_configure 'CONTAINED DATABASE AUTHENTICATION', 1
GO
RECONFIGURE
GO
sp_configure 'show advanced options', 0 
GO
RECONFIGURE
GO

Во-вторых, создайте автономную базу данных с помощью оператора CREATE DATABASE, установив частичное автономирование:

CREATE DATABASE CRM
 CONTAINMENT = PARTIAL;

Чтобы проверить, является ли база данных автономной базой данных, можно использовать представление sys.databases. Следующий оператор проверяет, является ли база данных CRM автономной базой данных:

SELECT  
  name,
  containment
FROM sys.databases
WHERE name = 'CRM';

Выход:

В-третьих, создайте пользователя, который подключается к базе данных CRM:

USE CRM;
CREATE USER bob
WITH PASSWORD = 'UixoJN72.';

Чтобы составить список всех пользователей автономной базы данных, используйте представление sys.database_principals:

SELECT
  name,
  type_desc,
  authentication_type_desc
FROM sys.database_principals
WHERE authentication_type = 2;

Выход:

Подключитесь к содержащейся базе данных с помощью SSMS

Сначала введите имя сервера, пользователя и пароль и нажмите кнопку «Параметры» >>:

Во-вторых, введите базу данных, которую вы хотите подключить, на вкладке свойств подключения и нажмите кнопку «Подключить»:

Если вы успешно подключитесь к базе данных CRM, вы увидите, что пользователь bob может видеть только базу данных CRM:

Преобразование обычной базы данных в автономную базу данных

Сначала создадим инвентарь базы данных с логином cat и пользователем bobcat для демонстрации:

CREATE DATABASE inventory;
CREATE LOGIN cat
WITH PASSWORD = 'AhudnmX9!';
USE inventory;
CREATE USER bobcat
FOR LOGIN cat;

Во-вторых, преобразуйте базу данных инвентаря в автономную базу данных с помощью оператора ALTER DATABASE:

ALTER DATABASE inventory 
SET CONTAINMENT = PARTIAL WITH NO_WAIT;

В-третьих, преобразуйте пользователя базы данных bobcat, который сопоставлен с именем входа в SQL Server cat, в пользователя автономной базы данных с паролем, используя системную хранимую процедуру sp_migrate_user_to_contained :

EXEC sp_migrate_user_to_contained 
    @username = N'bobcat' ,   
    @rename = N'keep_name',   
    @disablelogin =N'disable_login'; 

Этот вызов хранимой процедуры преобразует пользователя базы данных bobcat в пользователя базы данных, находящегося в контейнере. Он сохраняет то же имя пользователя.

Если вы хотите скопировать имя входа для пользователя содержащейся базы данных, вы можете передать N'copy_login_name' параметру @rename.

Аргумент N'disable_login' указывает хранимой процедуре отключить вход bob в базу данных master. Если вы не хотите отключать вход, вы можете использовать аргумент N'do_not_disable_login'.

Краткое содержание

  • Автономная база данных — это автономная база данных, которая имеет собственные метаданные, настройки базы данных и конфигурации и не зависит от экземпляра SQL Server.
Мирослав С.

Автор статей, ИБ-специалист