Introduction aux bases à relation contenant-contenu (Contained Database)
2014-09-29 09:53:30.000
2014-09-29 09:53:30.000
Les bases de données de type contenant-contenu, en anglais "Contained Database",
sont des bases indépendantes en tout ou partie de l'instance SQL Server.
Elles contiennent tous les paramètres et les métadonnées requises pour fonctionner
et n'ont pas de dépendances de configuration sur l'instance du moteur de base de données sur lequel elles sont déployées.
Il en existe de trois types :
Les utilisateurs d'une base de type contenant-contenu peuvent se connecter avec :
- Les bases sans relation contenant-contenu (Mode NONE dans SQL Server). Il s'agit des bases de données de base utilisées jusqu'à ce jour dans SQL Server.
- Les bases avec relation partielle de type contenant-contenu (Mode PARTIAL dans SQL Server).
- Les bases totalement de type contenant-contenu : cette base est complètement indépendante de l'instance. Ce mode n'est pas disponible dans SQL Server.
Les utilisateurs d'une base de type contenant-contenu peuvent se connecter avec :
- L'authentification SQL Server (compte intégré à la base).
- L'authentification Windows (compte intégré à un Active Directory).
1. Activer les bases de données à relation contenant-contenu au niveau de l'instance
sp_configure 'contained database authentication', 1;
GO
RECONFIGURE;
GO
GO
RECONFIGURE;
GO
2. Conversion d'une base de données normale vers une base de données à relation contenant-contenu
USE [master]
GO
ALTER DATABASE [MyDatabase] SET CONTAINMENT = PARTIAL;
GO
GO
ALTER DATABASE [MyDatabase] SET CONTAINMENT = PARTIAL;
GO
3. Migration des utilisateurs vers des utilisateurs de base de données à relation contenant-contenu
Il n'existe pas de méthode simple pour convertir l'ensemble des utilisateurs d'un seul coup. Il faut donc tous les convertir un à un :DECLARE @username sysname; DECLARE user_cursor CURSOR FOR SELECT dp.name FROM sys.database_principals AS dp JOIN sys.server_principals AS sp ON dp.sid = sp.sid WHERE dp.authentication_type = 1 AND sp.is_disabled = 0; OPEN user_cursor FETCH NEXT FROM user_cursor INTO @username WHILE @@FETCH_STATUS = 0 BEGIN EXECUTE sp_migrate_user_to_contained @username = @username, @rename = N'keep_name', @disablelogin = N'disable_login'; FETCH NEXT FROM user_cursor INTO @username END CLOSE user_cursor; DEALLOCATE user_cursor;