Bom,,,
A Minha professora de inglês fez a tradução dos documentos para encaminhar para a Microsoft, isso foi uma grande ajuda…
Acabei o cadastro no link que eles haviam enviado, mas até agora não tive a liberação do link para upload dos arquivos… já mandei uns 3 emails para eles e ninguem respondeu… 🙁
Tentei ligar agora pela manhã, mas ai lembrei que tem o fuso horário,,, vou tentar ligar a tarde para falar com alguém.
Tag Archives: sql
Preparação para o MCM SQL Server 2008 – Parte II
Bom,,,
Recebei hoje a resposta da inscrição para o MCM…. eeeeeeeeeeeeeeeee
A primeira parte já foi, meu transcript está aprovado agora preciso aprontar o caso de estudo e traduzir meu currículo para inglês.
Após aprontar os dois arquivos tenho que fazer upload deles para um link que recebi no email, eles vão analisar os 2 e vamos ver se aprovarão…. mais trabalho,,,,
Preparação para o MCM SQL Server 2008
É pessoal,,,
agora vamos ver se tenho conhecimento suficiente, me inscrevi hoje para o MCM SQL Server 2008.
http://www.microsoft.com/learning/en/us/certification/master.aspx
Já possuo os pré-requisitos para pelo menos passar na 1º parte que é a validação do transcript com as certificações de Database Administrator e Database Developer.
Já fico muito feliz de pelo menos tentar, se eles aceitarem meu registro e depois eu conseguir me inscrever para o curso já vo fica muuuuito mais feliz.
Passar nas provas do treinamento então,,, uahuahauhauhau
Enquanto o pessoal da Microsoft avalia o transcript, Dna. Patroa e eu estamos vendo hotel e passagem pra ir pra lá.
Se começar a somar todos os valores envolvidos começa a desanimar, não é nada barato pra gente (ainda mais com nossa renda), já estamos economizando faz um tempão e cada vez que o dolar aumenta fica pior ainda.
Conforme eu for passando no processo da inscrição do MCM vo escrevendo…. 😀
Utilizando Views Dinâmicas para monitorar e melhorar a performance do SQL Server
Utilizar Dynamic Management Views (DMVs) é uma boa opção para monitorar o SQL Server. DMVs são uma coleção de views e funções de tabelas que habilitão você a obter informações sobre trabalhos internos do SQL Server. Vou comentar um pouco sobre DMVs.
DMVs é uma parte do schema sys na base master. Você pode localizar uma lsta de views dinâmicas pelo SQL Server Managemente Studio em “Master/Views/System Views”, e de dynamic functions em “Master/Functions/System Functions/Table-valued Functions”. Cada objeto dinâmico tem o prefixo como “dm_”.
O SQL Server 2005 introduziu as DMVs e o SQL Server 2008 incluiu DMVs adicionais. Com a ideia de qualquer usuário de banco, você pode consultar uma DMV em uma parte do banco e obter um resultado diferente se executar a mesma DMV em outra base/instância, mas o contexto permanece o mesmo.
DMVs: Uma alternativa a System Tables
Desde o SQL Server 2005, a Microsoft não autoriza modificações nos dados das system tables. Nas versões anteriores as system tables proviam uma das formas de recuperar metadata e em alguns casos, elas eram as únicas maneiras de resolver algumas tarefas mais complicadas. No SQL Server 2005 e 2008 você ainda pode executar querys nos objetos que tem o mesmo nome das system tables, mas agora esses objetos são system views.
DMVs proveem uma melhor alternativa para as system tables por diversos motivos:
– DMVs são dinâmicas por definição, seu conteúdo é alterado dinâmicamente pelo servidor.
– DMVs oferencem informações que antes eram difíceis ou até impossíveis de obter através de system tables, como contadores de performance ou comandos não documentados do DBCC.
DMVs podem ser classificadas pelo tipo de dados que elas retornam. Exemplo, SQL Server Operating System (SQLOS) DMVs retorna informações sobre memória, threads, contadores de performance, waits e outras informações de recursos utilizados, DMVs de transaction retorna detalhes sobre dados em trasações e locks, DMVs de SQL Server features traz informações sobre replicação, service broker, full-text search, database mirroring, etc.
Falta de Índices
Agora que vocês já devem estár mais confusos do que eu, vamos focar em um exemplo: falta de índices.
Se você já trabalhou em otimizar a performance de querys, você sabe que existem várias técnicas. Entretando, índices acabam sendo os mais efetivos para fazer uma query executar o mais rápido o possível. O SQL Server 2005 introduziu o missing indexes para ajudar a analisar informações sobre índices que PODERIAM melhorar a performance durante a execução de algumas querys.
Quando uma query é executada, o SQL Server Query Optimizer examina os índices existentes e considera a utilização deles ao invés de um table scan. Se um índice não existe, o SQL Server guarda essa informação sobre esse possível índice em uma DMVs. Você pode rever esses índices que não existem executando uma query.
O SQL Server 2005 dispõe das seguintes DMVs sobre missing index:
Sys.dm_db_missing_index_group_stats
Sys.dm_db_missing_index_groups
Sys.dm_db_missing_index_details
Sys.dm_db_missing_index_columns
Por exemplo, a query abaixo junta as informações das DMVs acima da forma mais benéfica o possível e traz o comando para criar o índice:
SELECT avg_user_impact AS average_improvement_percentage, avg_total_user_cost AS average_cost_of_query_without_missing_index, ‘CREATE INDEX ix_’ + [statement] + ISNULL(equality_columns, ‘_’) + ISNULL(inequality_columns, ‘_’) + ‘ ON ‘ + [statement] + ‘ (‘ + ISNULL(equality_columns, ‘ ‘) + ISNULL(inequality_columns, ‘ ‘) + ‘)’ + ISNULL(‘ INCLUDE (‘ + included_columns + ‘)’, ”) AS create_missing_index_command FROM sys.dm_db_missing_index_details a INNER JOIN sys.dm_db_missing_index_groups b ON a.index_handle = b.index_handle INNER JOIN sys.dm_db_missing_index_group_stats c ON b.index_group_handle = c.group_handle WHERE avg_user_impact > = 40 |
A query acima retorna qualquer índice que tenha um índice estimado de performance igual ou superior a 40%.
Você pode alterar a porcentagem alterando a última linha ou trocar o nome do índice de acordo com seus padrões.
Nota, como as DMVs são atualizadas dinâmicamente, as informações que forem recolhidas através dessa query não necessáriamente será a mesma se o SQL server for reiniciado.
As informações contidas nas DMVs são atualizadas desde o momento que o SQL server for iniciado.
Essa opção de criação de índices é muito usual mas, não é a solução perfeita. Os administradores tem que examinar e avaliar a real necessidade da criação dos índices.
Considerando que enquanto um índice pode melhorar a velocidade de um Select, ele pode ocasionar impactos em um Insert, Update ou Delete. Isso ocorre porque o SQL Server irá dedicar memória para manter os índices atualizados.
Movimentar arquivos de Bancos de Dados
Nesse post vou falar como movimentar os arquivos de um banco de dados de uma unidade/diretório para outra unidade/diretório.
Ai você pensa:
“Pra que? Já sei como faz isso. Não tem nenhuma novidade.” ou
“Aaahh,,, isso é facil, uso o bom e velho backup/restore ou o detach/attach…”
Isso é verdade, não tem nenhuma grande novidade em fazer a movimentação mas, ai vem a parte divertida, pra que fazer do método fácil se podemos fazer do método interessante?
1.- Backup/Restore
Se executarmos o bom e velho backup/restore, no momento do restore podemos alterar o caminho onde os arquivos irão ser gravados, isso é simples.
Apenas precisaremos executar o processo de backup que, dependendo do tamanho da base, pode demorar alguns minutos ou até umas horas. Além de ter que ter um espaço para armazenar o backup ou executá-lo através de uma unidade de backup.
2.- Detach/Attach
Usando o Detach ganhamos algum tempo, você vai apenas mover os arquivos de log e dados para outro lugar e anexar a base novamente.
O problema disso é se você usar o Service Broker ou até o Mirror, você terá que refazer o processo.
3.- Alter Database (o “método interessante”)
Esse “método” a seguir cria uma procedure para executar a movimentação do banco para outro local usando o Alter database, mas é possível executá-lo em diversos bancos como vou demonstrar:
Vamos criar 2 bases de dados para testar:
create database banco1
create database banco2 |
Agora execute o scritp abaixo para criar a procedure que irá executar a movimentação dos arquivos:
IF ( OBJECT_ID(‘dbo.sp_MoveDatabase’) IS NOT NULL ) begin DROP PROCEDURE dbo.sp_MoveDatabase end GO create procedure sp_MoveDatabase @NewDataFolder nvarchar(1000), as set nocount on; if right(@DbList,1) = ‘,’ Begin End set @String = @DbList BEGIN END Begin exec sp_configure ‘xp_cmdshell’ , ‘1’ print ‘NewMdfFolder is ‘ + @NewDataFolder SET @RowNum = 1 Begin — Derruba todas as conexoes configurando como single user with immediate — configura db off line begin –move arquivos files begin set @NewPath = @NewLogFolder + @FileName — altera caminho dos arquivos set @sql = ‘ALTER DATABASE [‘ + @DbName + ‘] SET ONLINE;’ — aceita multi user novamente. reconfigure RECONFIGURE |
** ATENÇÃO **
Os diretórios de destino já devem estar criados, caso você execute a procedure sem criar o destino o script vai alterar o caminho da base e não vai movimentar os arquivos e quando ela foi trazida online ela vai apresentar erro.
** ATENÇÃO 2 **
Esse script é do tipo “Vai filhão”, quando ele for executado todos os usuários conectados serão desconectados sem dó nem piedade, todas as transações que eles estiverem executando serão dropadas. As conexões apenas poderão ser reestabelecidas após o termino da movimentação.
Para executar a procedure execute-a da seguinte forma:
exec sp_MoveDatabase @NewDataFolder = ‘c:\teste\’, @NewLogFolder = ‘d:\teste\’, @sDbList = ‘banco1, banco2’ |
Se tudo der certo, as bases banco1 e banco2 estarão seus novos destinos.
Preparação para o MCM SQL Server 2008 – Parte IV
huhuhuhuhhuhu
o pessoal da Microsoft respondeu hoje o email !!!
Já está liberado o acesso par o upload dos arquivos para análise, por sinal já mandei eles…heheheh
agora em teoria é só esperar 5 dias úteis para a resposta…
Alterar língua do FullText
A algum tempo atrás tive que alterar a língua de pesquisa do FullText do SQL 2005 de Neutral para Portugês.
Em teoria um procedimento bem simples, acha o FullText, edita dele e troca na caixa pra Português.
Mas, como sempre, nada é tão simples assim…
Descobri que por padrão o SQL 2005 não traz alguns idiomas, para adicionar o Português tive que fazer o procedimento do KB908441.
Mas, ao invés de ficar lendo o KB vo descrever o passo a passo pra fazer funcionar:
IMPORTANTE !!!
Se você utilizar mais de uma instância do SQL no mesmo servidor você vai ter que fazer o procedimento mais de uma vez.
Ok, sabendo disso, agora vamos começar.
Levando em conta que provavelmente você está usando uma instância, ela é conhecida como MSSQL.1
1. Clique em Start, clique em Run, digite regedit e clique em OK
2. Dentro do Editor de Registro, localize a seguinte chave:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSearch\CLSID
3. No menu Edit escolha New e clique em Key
4. Digite {25B7FD48-5404-4BEB-9D80-B6982AF404FD} e pressione Enter
5. No painel da direita, modifique o valor Default
6. Em Edit String, digite ptblr.dll e clique em OK
7. No menu Edit escolha New e clique em Key
8. Digite {D5FCDD7E-DBFF-473F-BCCD-3AFD1890EA85} e pressione Enter
9. No painel da Direita, modifique o valor Default
10. Em Edit String digite ptblr.dll e clique em OK
Adicione uma sub-chave ao MSSQL.1\MSSearch\Language
11. No menu Edit escolha New e clique em Key
12. Digite ptb e pressione Enter
13. Na Tabela abaixo existem 4 itens que devem ser criados:
Tipo | Nome | Valor |
String | NoiseFile | C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\FTData\noiseptb.txt |
String | TsaurusFile | C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\FTData\tsptb.xml |
DWord | Locate | 00000416 |
String | WBreakerClass | {25B7FD48-5404-4BEB-9D80-B6982AF404FD} |
String | SemmerClass | {D5FCDD7E-DBFF-473F-BCCD-3AFD1890EA85} |
Depois desse pequeno processo, pelo menos no meu caso, não tive que reinicia o SQL para aparecer Portugês, mas tive que executar um Rebuild do FullText.
SQL Injection
Problema:
Esse tipo de ataque tem um número grande de coincidencias que apontão para a mesma fonte.
Com essa informação em mãos, a resolução deveria ser simples.
Com o seu site atacado por SQL-Injection como você pode identificar, analizar, recuperar e resolver o problema? E o que você pode aprender com isso?
Solução:
Como ponto de referencia, SQL-Injection é um exploit onde comandos SQL são passados para o servidor de SQL de uma forma maliciosa.
Analisando a situação, podemos chegar em 4 componentes básicos:
1º Identificação do Problema;
2º Análise da situação para determinar a causa raiz tão como opções de saída para recuperação e solução, que é seguido por recuperar os dados e prevenir por um problema futuro.
3º Plano de comunicação
4º Como resolver o incidente caso ocorra novamente.
Vamos por partes…
Identificar:
Usualmente os usuários ou clientes reportão o caso para o time de TI.
Com o problema detectado a análise precisa ser conduzida nesses passos:
– Logs do Firewall
– logs do IIS
– Páginas Web
– Tabelas do SQL Server
Em termos de exemplificação de código, strings são passadas para o SQL Server. Após ver o código, um simples cursor para atualizar colunas varchar, nvarchar, text ou ntext pode ser inserido através da URL ou através da própria página.
Algumas referencias:
* Http://www.bloombit.com/Articles/2008/05/ASCII-Encoded-Binary-String-Automated-SQL-Injection.aspx#attack-description
* http://www.theregister.co.uk/2008/08/07/new_sql_attacks/
* http://isc.sans.org/diary.html?storyid=4840
Analise
Após rever os Logs do IIS é possível traduzir o código, mas se você tiver uma ferramenta de Performance Monitor, ela pode capturar longos tempos de execução de SQL que podem prover grande ajuda para identificar apartir de qual página foi feita a invasão.
Se você não possuir, terá que gastar um bom tempo para identificar por onde veio a invasão.
Uma vez que a string foi determinada esses 2 scripts podem lhe oferecer um grande auxilio para identificar as colunas que foram alteradas e/ou recuperar:
Um método simples para identificar se seu site foi infectado é usando o google para rodar a seguinte query:
* Esse método foi passado pela SANs (http://isc.sans.org/diary.html?storyid=4840)
site:seu_site “script scr=http://*/””ngg.js”|”js.js”|”b.js”
Recuperando:
Existem algumas formas de recuperar os dados alterados
– Backup\Restore
Pro: Se você possui um método de recuperar os dados rapidamente e você sabe exatamente quando os dados foram infectados, pode ser uma forma rápida e simples para recuperar a integridade do site.
Con: Se você não sabe quando os dados foram alterados, você não saberá se o backup foi feito com as informações alteradas ou a janela de perda de dados poderá ser grande.
– Através de análise
Pro: Com o script “sp_TrocaTexto para SQL 2005, a informação maliciosa pode ser identificada e corrigida com confidencialidade.
Con: É interessante efetuar um backup da base de dados antes de executar as alterações para garantir integridade de informações e posterior análise.
Em ambas opções, o problema com o SQL-Injection já deverá ter sido resolvidor.
Resolução:
Possíveis passos para ajudar na solução:
– Desenvolvimento\DBA
– Validar os comandos SQL passados pelo front-end (IIS)
– Validar os dados e os tipos de dados passados
– Converter SQL dinâmico em Stored Procedures com parâmetros
– Remover páginas ou diretórios antigos que pode ser usados como pontos de partida para a invasão
– Prevenir que qualquer comando seja executado em conjunto com os seguintes comandos: ponto e virgura. EXEC, CAST, SET, dois pontos, apostrofe, etc..
– Baseado na linguagem de programação do seu front-end, determinar quais os caracteres especiais podem ser removidos antes de qualquer comando passado para o SQL Server
– Administradores de Rede
– Prevenir trafego de alguns IP´s em particular ou domínios
– Verificar se nas configurações de firewall existe algum item para prevenir quanto a SQL-Injection
– Procurar por produtos ou serviços para analisar seu código e site em busca de erros e prevenção
* http://www.acunetix.com/vulnerability-scanner/
* http://www.rapid7.com/nexpose/web-application-va.jsp
* http://www.fortify.com/products/detect/
* http://www.mcafeesecure.com/us/
* http://www.onlinehackscan.com/default.asp
Plano de comunicação:
O plano de comunicação deve ser atual, claro e importante.
Mantenha isso em mente.
Para muitas pessoas, não saber o que está acontecendo gera desconforto, anciedade, e achar que a equipe de TI não está fazendo seu trabalho.
Comunique sobre a descoberta do ocorrido, informe que o time está trabalhando para determinar a causa e solução do problema e que uma atualização desse status será repassada em até 4 horas;
Comunique o ocorrido, os passos tomados pela equipe de TI para resolver o problema e que a solução estará implantada em até 30 minutos;
e por final comunique que o incidente foi sanado, os passos para resolver o incidente e os passos futuros para prevenir novos problemas.
Recuperação Rápida:
Uma forma de recuperação rápida seria:
– Parar os serviços de Web
– Rever os logs do IIS para determinar os comandos utilizados para lozalizar a vulnerabilidade
– Converter o código para determinar quais tabelas foram alteradas
– Localizar e alterar as strings nas tabelas
– Corrigir as páginas/comandos que possuiam as vulnerabilidades
– Testar para identificar se não existem novos problemas
– Atualizar as páginas/ comandos nos servidores de produção
– Iniciar os serviços de web
Como ver a versão do SQL
Muitos já sabem que se utilizar o:
select @@version |
terá as informações sobre a versão do SQL onde você está executando este select.
Mas se você executar:
SELECT CAST( SERVERPROPERTY( ‘MachineName’ ) AS varchar( 30 ) ) AS MachineName , CAST( SERVERPROPERTY( ‘InstanceName’ ) AS varchar( 30 ) ) AS Instance , CAST( SERVERPROPERTY( ‘ProductVersion’ ) AS varchar( 30 ) ) AS ProductVersion , CAST( SERVERPROPERTY( ‘ProductLevel’ ) AS varchar( 30 ) ) AS ProductLevel , CAST( SERVERPROPERTY( ‘Edition’ ) AS varchar( 30 ) ) AS Edition , ( CASE SERVERPROPERTY( ‘EngineEdition’) WHEN 1 THEN ‘Personal or Desktop’ WHEN 2 THEN ‘Standard’ WHEN 3 THEN ‘Enterprise’ END ) AS EngineType , CAST( SERVERPROPERTY( ‘LicenseType’ ) AS varchar( 30 ) ) AS LicenseType , SERVERPROPERTY( ‘NumLicenses’ ) AS #Licenses;SELECT @@VERSION AS [SQL Server Details]; |