Durante o processode migração de databases, sempre temos um trabalho extra, pois durante amigração perdemos o vínculo com o Login. A solução foi criar um databaseindependente.

Um ContainedDatabase √© um database isolado da inst√Ęncia e dos outros databases.
O SQL Server 2012 ajuda o usu√°rio a isolar o database da inst√Ęncia e possui 4caracter√≠sticas:
-Maioria dos metadados que descreve o database é armazenado no próprio database(ao invés de armazenar no Master).
-Todos Metadados s√£o definidos usando o mesmo Collation
-Autentica√ß√£o de Usu√°rio pode ser feito pelo Database, reduzindo a depend√™nciado Login da inst√Ęncia.
-Objetos DMVs, XEvents, etc, possuem informa√ß√Ķes sobre o Contained Database.

1) CONFIGURAÇÃO DOSERVIDOR
Para usufruir dos recursos do ContainedDatabase precisamos configurar o servidor:

sp_configure 'contained database authentication',1
GO
RECONFIGURE

2) CRIAÇÃO DODATABASE
Agora criaremos o Database com o opçãode Contained:

USE master
GO
CREATEDATABASE TesteCD CONTAINMENT = PARTIAL
GO

3) CRIA√á√ÉO DOUSU√ĀRIO
Criação do Usuário, sem a necessidade devínculo com o Login:

USE TesteCD
GO
CREATEUSER CDUser WITH PASSWORD = 'SQL2K12pass'
GO

4) MIGRAÇÃO DE SQLSERVER LOGINS PARA DATABASE USERS

Se você já possui umusuário normal e quer migrar para o tipo Contained, você pode utilizar aprocedure sp_migrate_user_to_contained.

Ela possui 3par√Ęmetros:
-@username=Nome de um usuário que consta no database, mas é um SQL ServerLogin.
-@rename= 2 valores - copy_login_name(cria o novo usuário com o nome do Loginao invés do usuário), keep_name(mantém o nome do usuário)
-@disablelogin= 2 valores - disable_login(desabilita o login na Master) ,do_not_disable_login(N√£o desabilita o login na Master).

EXEC SP_MIGRATE_USER_TO_CONTAINED @username='ozimar', @rename='keep_name',@disablelogin='do_not_disable_login'

5) CONECTANDO AO CONTAINEDDATABASE
√Č necess√°rio passar o Database na string de conex√£o ou alter√°-lo na Caixa deconex√£o do SSMS.



Após logar, terá esta visão:    



6) ACESSANDO OUTROSDATABASES

SELECT * FROMDatabase2.dbo.Cliente

Este comando ir√°gerar um erro, pois o usu√°rio utilizado n√£o tem acesso a outro database.
Para resolver isso temos que dar acesso ao usu√°rio Guest.

Use Database2
GO
GRANTCONNECT TO guest
GO

7) LIMITA√á√ēES
-DMVs e XEvents v√£o ajudar a identificar objetos "not contained" eque representam riscos ao mover o database.
-N√£o pode ser utilizado Replication, Change Data Capture, or Change Tracking.
-Utilizar objetos que depende de Built-in Functions com mudança de Collation.
-Uso do Kerberos Authentication. Caso precise de uma autenticação neste níveluse Windows Authentication.