No artigo deste mês irei explorar alguns recuros do
lançamento da nova versão do Banco de Dados da Microsoft, o Microsoft SQL
Server 2016. Terei como base o E-Book gratuito escrito por Stacia Varga, Denny
Cherry E Joseph D’ Antoni que está disponível no formato “pdf” no seguinte link:
http://aka.ms/IntroSQLSvr2016PE_dsktp_pdf
http://aka.ms/IntroSQLSvr2016PE_dsktp_pdf
É
importante informá-los que o lançamento oficial foi no dia 07 de Abril de 2016
e sua versão “SQL Server 2016 Release Candidate 2” poderá ser baixada e
instalada através do link:
A
ideia central deste artigo será de apenas apontar e explorar algumas novidades
encontradas nesta nova versão do banco de dados, sempre tendo como base o
E-book supracitado, ou seja, não abordarei instalações, configurações, entre
outros recursos que explorarei com certeza em artigos futuros.
1) Segurança mais rígida
O Microsoft SQL Server 2016 introduz diversos novos recursos
relacionados à segurança de dados, sendo: “Always Encrypted“, “Row-Level
Security” e “Dinamic Data Masking”. Abaixo irei descrever todos estes recursos.
- Always Encrypted
Traduzindo para o português como “Sempre Crptografados”, é denominado
como uma tecnologia de criptografia do lado do cliente no qual os dados são
automaticamente criptografados não apenas quando é escrito, mas também quando
ele é lido por um outro aplicativo. Ao contrário de criptografia de dados transparente,
que criptografa os dados no disco. Sua principal característica ao utilizar
este tipo de controle, é que a aplicação transfere de forma segura os dados
criptografados no banco de dados que pode ser descriptografado depois apenas
por um aplicativo que tem acesso à chave de criptografia.
Exemplo:
CREATE TABLE dbo.EXEMPLO_CRIPTOGRAFIA
(
CODIGO INT IDENTITY(1,1) PRIMARY KEY,
NOME VARCHAR(50),
DOCUMENTO VARCHAR(30),
DATA_NASCIMENTO DATE ENCRYPTED WITH
(
ENCRYPTION_TYPE = RANDOMIZED,
ALGORITHM = ‘AEAD_AES_256_CBC_HMAC_SHA_256’,
COLUMN_ENCRYPTION_KEY = MINHA_CHAVE
),
TIPO CHAR(10) ENCRYPTED WITH
(
ENCRYPTION_TYPE = DETERMINISTIC,
ALGORITHM = ‘AEAD_AES_256_CBC_HMAC_SHA_256’,
COLUMN_ENCRYPTION_KEY = MINHA_CHAVE
));
No exemplo acima, na criação do campo
definimos o tipo, o algoritmo e a chave de criptografia. Utilizamos nos campos
“DATA_NASCIMENTO” e “TIPO” através do comando “ENCRIPTED WITH”.
- Row-Level Security
Este tipo de recurso permite configurar tabelas de tal forma que os
usuários vejam apenas as linhas dentro da tabela para a qual iremos conceder
acesso. A “Row-Level Security”
permitirá aos DBAs e profissionais da área de banco de dados, realizar um
controle de acesso aos dados que estão armazenados em determinadas tabelas,
através do uso de funções conhecidas como “Predicate”, limitando assim que uma
possível coluna e seu respectivo valor seja consultado.
Poderemos usar um “predicate” para filtrar silenciosamente as linhas que
são acessíveis pelo usuário ao usar “INSERT”, “UPDATE” ou “DELETE”. Além disso,
poderemos também usá-los para o usuário de gravar dados através das cláusulas: “AFTER
INSERT”, “AFTER UPDATE”, “BEFORE UPDATE” e “BEFORE DELETE”.
Exemplo:
CREATE SCHEMA Seguranca
GO
CREATE FUNCTION Seguranca.acessoUsuarioPredicate(@UserName sysname)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN SELECT 1 AS accessResult
WHERE @UserName = SUSER_SNAME()
GO
CREATE SECURITY POLICY Seguranca.acessoUsuarioPolicy
ADD FILTER PREDICATE Seguranca.acessoUsuarioPredicate(UserName) ON dbo.Tabela,
ADD BLOCK PREDICATE Seguranca.acessoUsuarioPredicate(UserName) ON dbo.Tabela
GO
No código acima foi
criado uma função para adicionar e bloquear um usuário em uma determinada
tabela.
- Dynamic data masking
O
Dynamic Data Masking, limita a exposição de dados confidenciais, os mascarando
para usuários não-privilegiados. O Mascaramento de dados dinâmico ajuda a
evitar o acesso não autorizado a dados confidenciais, permitindo aos clientes
designar o quanto os dados confidenciais para revelar com impacto mínimo na
camada de aplicação. É uma característica de segurança que esconde os dados no
conjunto de resultados de uma consulta sobre campos de banco de dados
designado, enquanto os dados no banco de dados não são alterados. Considerado
de fácil utilização com aplicativos existentes, desde que as regras de
mascaramento sejam aplicadas nos resultados da consulta. Muitos aplicativos
podem mascarar dados confidenciais sem modificar consultas existentes.
Exemplo:
CREATE TABLE PESSOAS
(
ID int IDENTITY PRIMARY KEY,
ID int IDENTITY PRIMARY KEY,
NOME varchar(100) MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)') NULL,
SOBRENOME varchar(100) NOT NULL,
FONE varchar(12) MASKED WITH (FUNCTION = 'default()') NULL,
Email varchar(100) MASKED WITH (FUNCTION = 'email()') NULL
);
Ao criar os campos na tabela PESSOAS poderemos incorporar algumas máscaras existentes nesta nova versão do SQL Server, como por exemplo: “PARTIAL”, “DEFAULT” e “EMAIL”, ambas precedidas do comando “MASKED”.
2) Melhorias no Motor do Banco de
Dados
No Microsoft SQL Server 2016, poderemos encontrar uma funcionalidade melhorada em todo o
motor (engine) do banco de dados passando a gerir mais de um número muito maior de bases de
dados SQL Server por meio de seu banco de dados como um serviço (DBaaS). Neste item, vamos
explorar algumas das novas funcionalidades dos denominados “Query Store” e “Stretch Database”.
- Query Store
Esta funcionalidade irá nos auxiliar em muito em nossas longas jornadas de análise de planos de execução, a “Query Store” vai dar a possibilidade de fazer a análise de uma plano de execução que possa estar apresentando problemas de desempenho através de uma “indicação” ou “orientação” por parte do SQL Server, podendo escolher um plano de execução para processar uma query.Podemos considerar esta característica como uma das maiores melhorias para o motor de
banco do dados SQL Server, desde a introdução de pontos de vista de gerenciamento dinâmico.
Podemos corrigir diversos tipos de problemas acarretando uma maior velocidade dos dados.
Exemplo: Habilitando o “Query Store” sem parâmetros.
ALTER DATABASE dbTheClub SET QUERY_STORE = ON;
Exemplo: Habilitando o “Query Store” com parâmetros.
ALTER DATABASE dbTheCLub
SET QUERY_STORE = ON
(
OPERATION_MODE = READ_WRITE,
CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS =
5),
DATA_FLUSH_INTERVAL_SECONDS =
2000 ,
MAX_STORAGE_SIZE_MB =
10 ,
INTERVAL_LENGTH_MINUTES = 10
);
Exemplo de
utilização do “Query Store”
SELECT TOP 10 rs.avg_duration,
qt.query_sql_text,
qt.query_sql_text,
q.query_id,
qt.query_text_id,
p.plan_id,
GETUTCDATE() AS CurrentUTCTime,
qt.query_text_id,
p.plan_id,
GETUTCDATE() AS CurrentUTCTime,
rs.last_execution_time
FROM sys.query_store_query_text AS
qt
JOIN sys.query_store_query AS q ON qt.query_text_id = q.query_text_id
JOIN sys.query_store_plan AS p ON q.query_id = p.query_id
JOIN sys.query_store_runtime_stats AS
rs ON p.plan_id = rs.plan_id
WHERE rs.last_execution_time >
DATEADD(hour, -1, GETUTCDATE())
ORDER BY rs.avg_duration DESC;
Na
utilização de “Query Stores” teremos diversos tipos, como:
query_store_query_text: Texto da consulta digitado pelo usuário, incluindo espaços em branco, sugestões e comentários.
query_store_query: Informações de consulta e as suas estatísticas de execução.
query_store_plan: informações de plano de execução para consultas.
query_store_runtime_stats: estatísticas de tempo de execução para consultas.
- Stretch Database
Esta é uma
funcionalidade bastante esperada principalmente para os usuários do Azure,
através do “Strech Database”, em português ficaria mais ou menos como “Base de
Dados de Estiramento”, será possível armazenar porções (partes ou fatias) de
uma tabela no “Azure SQL Database”. Através deste recurso, temos a capacidade
de armazenar dados históricos contidos em uma tabela de forma segura e
transparente diretamente na nuvem, ou melhor dizendo no Microsoft Azure. A partir
do momento que este recurso é habilitado, de forma silenciosa os dados
considerados históricos são migrados para um banco SQL Azure, tudo isso é feito
pelo SQL Server sem exigir qualquer alteração de código em sua query ou
aplicação.
Importante: Para realizar estes teste é necessário possuir uma conta Azure.
Exemplo para configurar a opção “REMOTE DATA ARCHIVE”:
EXEC sp_configure 'remote data archive', '1';
GO RECONFIGURE;
GO
Ou também podemos facilmente configurar via interface gráfica, clicando
com o botão direito sobre a base de dados escolhendo “Tasks” e logo em seguida
“Enable Database for Stretch...”
Ver Imagem 01.
![]() |
Figura 01: Configurando o “Database for Stretch...” |
Conclusões
Procurei
neste artigo discorrer um pouquinho das principais novidades desta novíssima
versão do Banco de Dados SQL Server.
De acordo
com minhas pesquisas e leituras de artigos, a própria Microsoft está muito
confiante neste novo banco, o mesmo está promentendo ser ainda mais robusto
para aplicações de pequeno, médio e grande porte.
Aproveito
para indicar fortemente a leitura do e-book citado no ínicio do artigo para
quem desejar obter informações mais profundas sobre os assuntos abordados neste
artigo, assim como outros inúmeros que poderão encontrar lá com minuciosos
detalhes.
Este é o
primeiro de muitos artigos que a nossa equipe irá preparar para você.
Desejo a
todos uma ótima leitura. Um abraço!
Referências
https://www.microsoft.com/pt-br/evalcenter/evaluate-sql-server-2016
https://msdn.microsoft.com/en-us/library/bb669076(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/mt130841.aspx
https://msdn.microsoft.com/en-us/library/bb669076(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/mt130841.aspx
Nenhum comentário:
Postar um comentário