terça-feira, 30 de agosto de 2016

Como está a segurança do seu banco de dados?


Você se preocupa com seus dados? Então, leia o artigo.

Nas consultorias que tenho realizado país afora é comum encontrar nas empresas uma equipe de desenvolvimento, uma equipe de infraestrutura, uma equipe de gestores e ... cadê a equipe de Banco de dados? (Entenda que essa equipe é composta por um ou mais profissionais nas áreas de Administração de Banco de dados, Administração de Dados, Engenharia de Dados, Analistas de Dados, BI dentre outros).

Na maioria das empresas de pequeno porte, e algumas de médio e grande porte, o líder de desenvolvimento é o “cara” do Banco de dados. É a pessoa que mais conhece do negócio e dos dados da sua empresa. Algumas vezes essa pessoa que toma conta dos dados é o parente mais próximo ou a pessoa de confiança do gestor da empresa.

Enfim, independente do profissional responsável pelo banco de dados é importante que o gestor tenha um profissional com qualificação acadêmica específica, consciência e maturidade profissional e, se possível, algumas certificações na ferramenta que é utilizada.

Cuidados que não podem ser dispensados e são necessários para que seu profissional possa garantir a boa saúde e qualidade do seu banco de dados, visando o melhor desempenho do conjunto: Sistema Operacional, Software de Banco de Dados, Modelo de Dados e Performance do Servidor.

Um verdadeiro DBA com um mínimo de experiência sabe definir corretamente os níveis de segurança de acesso dos usuários ao banco de dados, como por exemplo, não passando para a equipe de desenvolvimento um usuário de aplicação com permissão de administrador do banco de dados. Ainda, define corretamente as opções de GRANT para o usuário, sem a necessidade de ceder a permissão como OWNER do banco de dados. Seus dados são sigilosos e/ou preciosos para você? Então, tome cuidado, pois a invasão e roubo de informações quase sempre ocorrem de dentro para fora da empresa por profissionais insatisfeitos.

Em quase todas as empresas que visitei nos últimos anos encontrei falhas básicas na segurança e administração dos usuários de acesso ao banco. Por exemplo: usuários de aplicação com permissão de SYSADMIN, ou ainda, o usuário administrador do banco (sa, root, postgres, SYSADMIN...) como usuário de aplicação, GRANTs desnecessários, as integrações com o LDAP em que os colaboradores que não fazem mais parte do quadro da empresa com seus usuários ativos e com permissão no banco de dados. Loucura total!

O gestor da empresa deve ficar atento as mudanças da empresa e ter cuidado especial com a área de Banco de Dados. Elenco alguns itens que podem auxiliar na sua gestão:
  • Faça uma triagem rigorosa de profissionais durante a contratação.
  • Realize um processo seletivo interno/externo (Caso seja possível, contrate uma consultoria externa para não haver "tendencionismos" na contratação).
  • Pague salários compatíveis com o mercado (gestor, não economize com esse profissional).
  • Exija experiência do profissional.
  • Realize pontos de controle com essa área.
  • Treine seu profissional/equipe.
  • Como pré-requisito solicite a assinatura do Termo de Confidencialidade (Documento deve ser assinado pelo profissional).
  • Faça um documento de Compliance para sua empresa.

Finalizo comentando que os dados da sua empresa ficam sob a responsabilidade dessa área, cuide para que os dados sejam guardados por profissionais qualificados e éticos.
Agradeço ao amigo Fabiano que ajudo na construção da imagem.

“A tarefa não é tanto ver aquilo que ninguém viu, mas pensar o
que ninguém ainda pensou sobre aquilo que todo mundo vê.”
Arthur Schopenha

quarta-feira, 10 de agosto de 2016

A história do Postgres

Fashion
Dadas as suas características poderosas e avançadas, você pode se perguntar como uma peça valiosa de software passou a ser livre e de código aberto. Tal como acontece com muitos outros projectos de código aberto, a resposta começa na Universidade Berkeley da Califórnia (UCB).

PostgreSQL, originalmente chamado de Postgres, foi criado na UCB por um professor de ciência da computação chamado Michael Stonebraker, que passou a se tornar o CTO da Informix Corporation. Stonebraker começou o desenvolvimento do Postgres em 1986 como um projeto de acompanhamento ao seu antecessor, o Ingres, agora de propriedade da Computer Associates. O nome Postgres, deriva de seu antecessor ("post + Ingres"). Ingres, desenvolvido entre 1977 e 1985, tinha sido um exercício de criação de um sistema de banco de dados de acordo com a teoria clássica de um RDBMS (Relational DataBase Management System). Postgres, desenvolvido entre 1986 e 1994, foi um projeto destinado a abrir novos caminhos em conceitos de banco de dados, tais como a exploração de tecnologias "objeto relacional".

Stonebraker e seus alunos de pós-graduação desenvolveram ativamente o Postgres por oito anos. Durante esse tempo, o Postgres introduziu regras, procedimentos, tipos extensíveis com índices e conceitos objeto-relacional. O Postgres foi posteriormente comercializado para pela Illustra que mais tarde foi comprada pela Informix e integrado no seu Servidor Universal. A Informix foi comprada pela IBM em 2001, por um bilhão de dólares.

Em 1995, dois alunos de Ph.D. do laboratório de Stonebraker, Andrew Yu e Jolly Chen, substituiram um subconjunto  da linguagem de consulta SQL do Postgres. Assim, o Postgres passou a ser chamado de Postgres95.

Em 1996, o Postgres95 foi lançado da academia para uma nova vida no mundo open source, quando um grupo dedicado de desenvolvedores, de fora da UCB viu a grandiosidade do sistema, e se dedicaram ao seu desenvolvimento contínuo. Contribuiram com grande parte de seu tempo, habilidades de desenvolvimento, trabalho e conhecimento técnico; este grupo global de desenvolvimento transformou radicalmente o Postgres. Ao longo dos próximos oito anos, trouxeram consistência e uniformidade ao código, criaram testes de regressão detalhados para a garantia de qualidade, criaram listas de discussão para bug reposrts, foram corrigidos inúmeros bugs, acrescentaram incríveis funcionalidades e, ainda, preencheram várias lacunas tais como documentação para desenvolvedores e usuários.

O resultado desse trabalho resultou em um novo banco de dados que ganhou uma reputação sólida, confiável e estável. Com o início de sua nova vida no mundo open source, com muitos novos recursos e melhorias, o sistema de banco de dados recebeu o nome atual: PostgreSQL. ( "Postgres" ainda é usado como um apelido e fácil de pronunciar.)

O PostgreSQL começou na versão 6.0. Com a ajuda de centenas de desenvolvedores em torno de todo o mundo, o sistema foi modificado e melhorado em quase todas as áreas. Ao longo dos próximos quatro anos (versões 6.0 e 7.0), grandes melhorias e novos recursos foram feitas, tais como:

- Multiversion Concurrency Control (MVCC). Bloqueio em nível de tabela foi substituído por um sistema de controle de concorrência multiversionado sofisticado, que permite que a atividade de leitura continue lendo dados consistentes durante a atividade de escrita e permite backups on-line (quentes), enquanto o banco de dados está em execução.

- Recursos do SQL importantes. Muitas melhorias foram feitas no SQL incluindo subconsultas, padrões, restrições, chaves primárias, chaves estrangeiras, identificadores entre aspas, coerção literal do tipo string, conversão de tipos e gravação de binário e hexadecimal entre outros.

- Melhorias nos tipos internos. Novos tipos nativos foram adicionados, incluindo uma ampla gama de tipos de date/time e tipos geométricos.

- Velocidade. Grandes aumentos de velocidade e desempenho na ordem dos 20-40% foram feitas, e backend tempo de arranque foi reduzida em 80%.

Os quatro anos seguintes (versões 7.0 a 7.4) trouxe o Write-Ahead Log (WAL), esquemas SQL, prepared queries, outer joins, consultas complexas,  associação de sintaxe SQL92, toast, suporte IPv6, full-text indexação, auto-vacuum, linguagens procedurais Perl / Python / TCL, melhor suporte SSL, revisão no otimizador, informações de estatísticas do banco de dados, mais segurança, funções de tabela e os aperfeiçoamentos de logs e melhorias significativas de velocidade, entre outras coisas. 

Hoje, a base de usuários do PostgreSQL é maior do que nunca e inclui um grupo considerável de grandes empresas que o utilizam em ambientes críticos. Algumas dessas empresas como a Afilias e Fujitsu fizeram contribuições significativas para o desenvolvimento do PostgreSQL.

Muitas organizações, agências governamentais e empresas utilizam o PostgreSQL. Você vai encontrar instalações em ADP, CISCO, NTT Data, NOAA, Research In Motion, O Serviço Florestal dos EUA e The American Chemical Society. Hoje, é raro encontrar uma grande empresa ou agência governamental que não está usando PostgreSQL em pelo menos um departamento.

Se alguma vez houve um tempo para você considerar seriamente o uso do PostgreSQL para alimentar a sua aplicação ou negócios, seria agora.


Adaptação: Anderson Abreu
Fonte: https://www.postgresql.org/about/history/

A Importância de Planejar e Gerenciar

Meu objetivo neste artigo é explanar um pouco sobre a importância do planejamento e gerenciamento de todas as atividades que executamos no dia-a-dia profissional/familiar e desenvolver a consciência de elaboração de planejamentos com maior atenção e com base em informações, utilizando para isso técnicas e meios que auxiliem no sucesso e consequentemente em um maior índice de acerto.
Inovar está diretamente ligado ao conceito de planejar, ou seja, criar algo novo ou melhorar algo já produzido deveria envolver um planejamento, um projeto.
Cada vez mais, o volume de informações disponíveis tem crescido de forma exponencial fazendo com que a a sua gestão seja uma tarefa mais complicada e imprescindível. Quando não há planejamento torna-se difícil a tomada de decisão. Imagine um barramento de serviço coletando informações de mídias sociais e extraindo informações relativas aos atletas dos jogos olímpicos e comparando com o perfil pessoal de cada atleta, exportando um gráfico com o nome dos atletas e a quantidade de mensagens relacionadas.
Diante de um século que está cedento por informação e necessita cada vez mais de agilidade na troca de dados, o governo e as empresas públicas e privadas são o alvo de empresas fornecedoras de serviços e produtos que precisam planejar com qualidade, cuidando para que não haja alterações de escopo, prazo e custo e que sejam cobrados valores justos. Afinal, quem paga a conta somos nós!
Não obstante, é comum observarmos alterações de escopo e prazo nos projetos de TI por diversos motivos como:
- falta de gestão;
- falta de preparo dos profissionais envolvidos;
- falta de clareza no entendimento do negócio;
- projetos mal escritos, "assassinos da língua portuguesa e das regras gramaticais" e
- dentre outras...

Alguns projetos na área de TI não alcançam seus objetivos e consequentemente o sucesso por causa de problemas relacionados ao seu gerenciamento.
Precisamos Planejar e gerenciar, conforme o PMBOK, gerenciamento de projetos:
                                 "é a aplicação de conhecimento, habilidades, ferramentas e
                                   técnicas às atividades do projeto a fim de atender aos seus 
                                   requisitos" e escopo do projeto é o "trabalho a ser realizado 
                                   para entregar um produto, serviço ou resultado com as 
                                  características e funções especificadas".

Fica um pergunta: Será que estamos fazendo o nosso trabalho com qualidade, planejamento e gerenciamento, respeitando normas e regras?
Portanto, planejar é imprescindível e, segundo Vieira:
                                  "o processo de planejamento define e refina os objetivos e as 
                                   escolhas das melhores alternativas de ação para atingir os 
                                   objetivos propostos pelo projeto".

Com a prática rotineira e sistêmica do planejamento em projetos de TI podemos identificar benefícios significativos, criar uma série de vantagens competitivas agregadas ao negócio e identificar novas oportunidades de negócio.
Alguns benefícios são:
- Soluções com tecnologia mais atual e maior qualidade;
- Redução de gastos desnecessários, duração do projeto e qualidade superiores;
- Maior rentabilidade;
- Reutilização de módulos em outros projetos e
- Clientes satisfeitos.

Lembre-se: Execute sua atividade com qualidade pois o retrabalho torna a atividade muito mais cara.
Um conjunto de metodologias, normas e ferramentas foram pensadas para nos auxiliar e minimizar as dificuldades na hora do planejamento, como por exemplo: Gestão da Informação, Sistemas de Informação, Pesquisas, Questionários, Opinião Especializada, Modelagem de Negócios, Benchmarking, ITIL, Análise de Pontos de Função e Lições Aprendidas.
Gestão da informação é uma das primeiras atividades a ser executada quando não há controle na elaboração de planejamento. Veja: 
                                              "é o processo que consiste nas atividades de busca, 
                                                classificação, processamento, armazenamento e
                                                disseminação de informações independentemente do 
                                                formato ou meio que se encontra."
                                                                                                                       CRUZ (2002)

Planejar e gerenciar não é uma tarefa do outro mundo, se você não tem conhecimento profundo sobre as questões explanadas anteriormente, utilize uma planilha eletrônica e registre suas atividades, mensure tempo, pense nos custos envolvidos.
A prática fará, com o tempo, a excelência!
Não se esqueça, a base de tudo é a disposição em registrar, armazenar e distribuir tais informações. A partir desse momento é possível criar uma base histórica e através de estatísticas, comparações e análises chegar a previsões mais fundamentadas.

REFERÊNCIAS
Project Management Body of Knowledge - PMOBK Guide. 3ª Edição 2004.
VIEIRA, Marconi Fábio. Gerenciamento de Projetos de Tecnologia da Informação. 2ª Edição.
HARRINGTON, H. J. Aperfeiçoando Processos Empresariais. Makron Books. 1ª Edição 1993.
TURBAN, Efraim, RAINER JR., R. Kelly. Administração de Tecnologia da Informação. 3ª Edição.

terça-feira, 2 de agosto de 2016

Indexação MS SQL Server

Fashion
Olá Pessoal,

Hoje tive a necessidade de criar um procedimento para reindexar todos os índices de todas as tabelas de um determinado banco de dados, de forma automática, ou seja, quando uma tabela for criada, o procedimento inclui automaticamente a nova estrutura para reindexação, caso existam índices.

Criei um JOB para garantir o processamento diário.

Segue a procedure:

CREATE PROCEDURE SP_REINDEXARTABELAS ( @Database_input VARCHAR(255) )
AS
BEGIN
DECLARE @Database VARCHAR(255)
DECLARE @Table VARCHAR(255)
DECLARE @cmd NVARCHAR(500)
DECLARE @fillfactor INT 

SET @fillfactor = 90

DECLARE DatabaseCursor CURSOR FOR  
SELECT name FROM master.dbo.sysdatabases WHERE name NOT IN  ('master','msdb','tempdb','model','distribution') and name = @database_input ORDER BY 1  
OPEN DatabaseCursor  

FETCH NEXT FROM DatabaseCursor INTO @Database  

WHILE @@FETCH_STATUS = 0  
BEGIN  
  SET @cmd = 'DECLARE TableCursor CURSOR FOR SELECT '''' + table_name + '''' as tableName FROM [' + @Database + '].INFORMATION_SCHEMA.TABLES WHERE table_type = ''BASE TABLE'''   
EXEC (@cmd)  
OPEN TableCursor   

FETCH NEXT FROM TableCursor INTO @Table   
WHILE @@FETCH_STATUS = 0   
BEGIN   
IF (@@MICROSOFTVERSION / POWER(2, 24) >= 9) 
BEGIN
SET @cmd = 'use '+@database_input +';
ALTER INDEX ALL ON ' + @Table + ' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ');'
EXEC (@cmd) 
END
ELSE
BEGIN
SET @cmd = 'use '+@database_input +';
DBCC DBREINDEX('+@Table+','' '','+ convert(char(2),@fillfactor)+'); '
EXEC (@cmd)
END
FETCH NEXT FROM TableCursor INTO @Table   
END   
CLOSE TableCursor   
DEALLOCATE TableCursor  
FETCH NEXT FROM DatabaseCursor INTO @Database  
END  
CLOSE DatabaseCursor   
DEALLOCATE DatabaseCursor
END

Para executar o procedimento:

EXEC SP_REINDEXARTABELAS 'nome_banco'