quarta-feira, 16 de fevereiro de 2011

Explore os recursos do SQL Server "Denali"

Nos sites da Microsoft já é possível encontrar informações e documentação sobre o SQL Server Denali. O TechNet já existe uma documentação em versão preview, que já contempla muitas das novas funcionalidades agregadas na próxima versão. Para os que tiverem interesse, segue o link:


Em breve, publicarei mais novidades!

terça-feira, 15 de fevereiro de 2011

Registrando alterações em uma base de dados - Parte 1

Quando se fala de segurança de uma base de dados, é fundamental conhecer os usuários que acessam uma base de dados e definir as permissões adequadas para cada usuário, configurando de forma que cada usuário tenha acesso somente aos dados que lhe são necessários.

Mesmo garantindo que cada usuário tenha as permissões adequadas, pode ser necessário armazenar um registro (log) das alterações realizadas na base de dados. Esse registro pode ser uma ferramenta importante para realizar auditorias, garantir a qualidade dos dados e também para monitorar alterações realizadas de forma maliciosa.

Um bom registro de log de alterações deve armazenar QUEM (login do usuário) realizou a alteração, QUANDO esta alteração foi realizada e O QUE foi alterado. Pode-se utilizar Triggers (discutiremos sobre elas nos próximos artigos) para disparar a gravação dos registros de um log.

Por enquanto falaremos sobre como obter as informações necessárias para gravar um histórico de alterações.

Como recuperar o usuário logado em uma base de dados SQL Server?
 
Para realizar esta tarefa, pode-se utilizar a função de sistema SYSTEM_USER.
Faça o teste:

SELECT SYSTEM_USER

Como recuperar o horário atual do servidor SQL Server?
 
A função GETDATE() retorna a data e hora atual do Sistema Operacional.
Faça o teste:

SELECT GETDATE()

Nos próximos artigos, veremos um pouco mais sobre auditoria de dados...

Referência:

MSDN - SYSTEM_USER 
MSDN - GETDATE (TRANSACT-SQL) 

terça-feira, 8 de fevereiro de 2011

A próxima versão do SQL Server está a caminho!

Está disponível para download no site da Microsoft a versão Community Technology Preview 1 (CTP1) do SQL Server, com code-nome Denali.

Para os que tiverem interesse em conhecer e testar a versão preview, basta acessar o link abaixo:


Lembrando que esta é uma versão em fase de testes e pode conter bugs e instabilidades...

Comentários e feedbacks sobre a nova versão são bem-vindos!

Em breve, postarei artigos sobre as novidades da próxima versão!

Alterando o Login de um Usuário de banco de dados

Aqui vai um script rápido para associar um usuário de um banco de dados SQL Server a um novo login no servidor:

ALTER USER dbUser WITH LOGIN = serverLogin

Essa alteração pode ser muito útil para manter as permissões de usuários ao realizar o RESTORE de um banco de dados em um novo servidor. 

Ao restaurar um banco, todos os usuários são criados, porém os logins do servidor antigo podem não existir no novo ambiente. Para manter as permissões associadas a cada usuário da base restaurada, basta associá-los a logins válidos no novo servidor (podendo estes ser criados preferencialmente com o mesmo nome, para garantir que as aplicações possam manter suas configurações para acessar o novo ambiente)

Agradeço a Bruno Peinado Brusco pela dica!

terça-feira, 1 de fevereiro de 2011

Alterando o Schema de uma tabela

O uso de schemas é uma boa prática para organizar a estrutura e as permissões de um banco de dados SQL Server.

Todos os objetos pertencentes a um Schema herdam suas permissões (desde que não existam permissões explícitas para cada objeto). Além disso, cada objeto pertence a um, e somente um, Schema.

Apesar do schema fazer parte da identificação de todo objeto, o simples renomeio de uma tavela  não possibilita associá-la a outro Schema.

Para realizar esta tarefa, deve-se utilizar a cláusula TRANSFER do comando ALTER SCHEMA.
Veja a sintaxe abaixo:

ALTER SCHEMA nome_do_schema TRANSFER outro_schema.nome_da_tabela; 

Note que o uso desta cláusula permite que a tabela nome_data_tabela seja "importada" para o Schema nome_do_schema.

No exemplo abaixo, 2 Schemas são criados (Marketing e RecursosHumanos). Em seguida, cria-se a a tabela Funcionario no Schema Marketing. Suponhamos que esta seja uma associação equivocada, e que a tabela Funcionario deva pertencer ao Schema RecursosHumanos.

-- Criando Schema para a área de Marketing
CREATE SCHEMA Marketing
GO

-- Criando Schema para a área de RecursosHumanos
CREATE SCHEMA RecursosHumanos
GO

-- Criando tabela Funcionario no Schema Marketing
CREATE TABLE Marketing.Funcionario
(
id int identity(1,1) PRIMARY KEY,
nome VARCHAR(100)
)
GO

/* Alterando o Schema da tabela Funcionario. 

(DE: Marketing PARA: RecursosHumanos) */
ALTER SCHEMA RecursosHumanos TRANSFER Marketing.Funcionario

GO

Observações:

  • Tome cuidado ao alterar nomes ou schemas de objetos de um banco de dados. Tenha sempre em mente que este objeto pode ser referenciado por aplicações ou mesmo por outros objetos existente no banco de dados. Caso isso aconteça, estas referências serão inválidas.

Agradeço a Douglas Almena pela dica!