Criptografia básica e rápida em MS SQL Server

Um forma bem rápida e básica de criptografar uma senha de usuário no SQL Server.
As funções que serão apresentadas são bem simples e possuem limitações, mas atende em vários exemplos.

Criando uma tabela para armazenamento dos dados:
Vamos criar uma tabela somente com os campos ‘nome’ e ‘senha’:

CREATE TABLE USUARIOS (NOME VARCHAR(30), SENHA VARBINARY(100))

O campo senha terá seu DataType VarBinary para armazenar os dados criptografados.

Inserindo criptografia
Utilizaremos a Systen Function pwdEncrypt (retorna o hash de senha do SQL Server do valor de entrada que usa a versão atual do algoritmo de hash de senha).

DECLARE @NAME VARCHAR(30)

@PWD1 VARCHAR(20)

@PWD2 VARBINARY(100)

SET @NAME = ‘WELLMARQUES’

SET @PWD1 = ‘SQLFREE<789>’

SET @PWD2 = CONVERT(VARBINARY(100), PWDENCRYPT(@PWD1))

INSERT INTO USUARIOS(NOME, SENHA) VALUES(@NAME, @PWD2)

Visualizando os dados criptografados:

SELECT NOME, SENHA FROM USUARIOS

Comparação
Utilizaremos a Systen Function pwdCompare (obtém o valor hash de uma senha e compara-o de uma senha existente).

DECLARE @NAME VARCHAR(30)

@PWD3 VARCHAR(20)

@PWD4 VARBINARY(100)

SET @NAME = ‘WELLMARQUES’

SET @PWD3 = ‘SQLFREE<789>’

SELECT @PWD4 = SENHA FROM USUARIOS WHERE NOME = @NAME

SELECT PWDCOMPARE(@PWD3, @PWD4, 0)

Observação:
Caso retorne 1  significa que os valores são iguais, caso contrário, retorne 0, significa que os valores não são iguais.

Até a próxima!…

Gerenciando processos no SQL Server (parte 02)

Também podemos obter a lista de processos atuais no servidor utilizando a Stored Procedure sp_who (ou wp_who2). Esta Stored Procedure consulta a table a de sistema sysprocesses que esta no banco master e ainda nos permite fazer um filtro por login se usuário.

  • Mostra todos os processos que estão sendo executados por um usuário que se logou no banco

EXEC SP_WHO ‘SA’

Uma vez que sabemos quais os processos, podemos obter qual o ID de processo da nossa conexão e descobrir qual foi o último comando enviado para o servidor por aquele processo.

  • Declara a variável que conterá o ID do processo desta conexão

DECLARE @SP_ID INT

  • Seta a variável

SET @SP_ID = @@SPID

  • Mostra qual o último comando enviado para o servidor pelo processo atual

DBCC INPUTBUFFER (@SP_ID)

Também podemos matar um processo utilizando o comando KILL. O comando KILL mata um processo, derruba a conexão com o cliente e termina qualquer transação pendente desta conexão. Devemos utilizar o comando KILL com cuidado, pois caso contrário os efeitos podem ser bem indesejáveis.

  • Mata a conexão cujo ID é 54

KILL 54

O comando KILL deve ser utilzado em alguns casos em que o processo está “travando” e ocupando recursos da máquina desnecessários. Um exemplo disto é uma conexão que por algum motivo entrou em um loop infinito.

Gerenciando processos no SQL Server (parte 01)

Processos – É uma maneira de visualizarmos a atividade de um servidor SQL Server. Através deles podemos fazer várias operações crucuais como:

  • Finalizar uma conexão morta;
  • Visualizar “locks” de objetos;
  • Monitorar o processo de tarefas;
  • etc.

Quando um usuário se conecta ao banco de dados (através de qualquer método como o ADO, JDBC, OBDC e etc) um novo ID de processo é criado para aquela conexão de usuário. Porém existem algusn processos internos do SQL Server que não fazem referência a nenhum tipo de conexão.

ID’s de processos indo de 1 até 50 são internos do SQL Server e valores acima de 50 são relativos a uma conexão de usuário. os ID’s de processo também são reutilizáveis.

Para visualizarmos todos os ID’s de processos atuais no SQL Server assim como algumas propriedades sobre eles, devemos utilizar o Enterprise Manager (SQL Server 2000), ManagementCurrent Activity e Process Info.

Podemos perceber que várias informações importantes sobre os processos são mostradas:

  • O ID do processo (retornado por @@SPID);
  • O “login” do usuário no banco;
  • O contexto do banco de dados atual da conexão;
  • Network Address (endereço MAC da placa de rede do client);
  • Status do processo;
  • etc.

Process Info - SQL Server 2000

Documentário: “A Internet” (Discovery Channel)

Um bom exemplo para quem busca novas idéias ou renovações de conhecimentos é montar um algoritmo ou até mesmo um relacionamento em banco de dados sobre as redes sociais.

Trabalhando com datas – SQL SERVER

Olá amigos!

Ontem estive procurando algumas maneiras de trabalhar com datas (maior de idade, menor de idade etc.). Pois bem, encontrei algumas funções do SQL Server e espero que possa ajudar:

GETDATE() – retorna a data e hora atual do sistema.

Ex.:
SELECT GETDATE()

DATEPART( unidade, data ) – retorna parte especificada de uma data como um inteiro.

Ex.:
SELECT DATEPART( YEAR, ’01/12/2011′ )
resposta: 2011

SELECT DATEPART( MONTH, ’01/12/2011′ )
resposta: 01

SELECT DATEPART( DAY, ’01/12/2011′ )
resposta: 12

DATEADD( unidade, numero unidade, data ) – retorna uma nova data através da sima do número de unidades especificadas pelo valor unidade a uma data.

Ex.:
SELECT DATEADD( DAY, 10, ’01/01/2011′ )
resposta: 2011-01-11

SELECT DATEADD( MONTH, 5, ’01/01/2011′ )
resposta: 2011-06-01

SELECT DATEADD( YEAR, 10, ’01/01/2011′ )
resposta: 2021-01-01

DATEDIFF( unidade, data1, data2 ) – calcula a diferença enre as datas (data2 e data1), retornando o resultado como um inteiro, cuja unidade é definida pelo valor unidade.

Ex.:
SELECT DATEDIFF( MONTH, ’02/01/2044′, ’05/25/2005′ )
resposta: 3 (meses)

SELECT DATEDIFF( DAY, ’02/01/2004′, ’05/25/2004′ )
resposta: 114 (dias)

SELECT DATEDIFF( YEAR, ’02/01/2004′, ’05/25/2006′ )
resposta: 2 (anos)

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.