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'
É 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.