Gerenciando usuários do SQL Server com C# Fernando Datorre Setembro 2012



Documentos relacionados
Manual Comunica S_Line

Sistema de Gerenciamento de Arquivos (SGA) (Manual de Instalação)

Segurança de Acesso a Banco de Dados no MS SQL Server

E&L Protocolo, Documentos Eletrônicos e Processos Perguntas Frequentes

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1

Manual Integra S_Line

Manual de digitação de contas Portal AFPERGS

Gerenciador Eletrônico de Documentos (GED) (Manual de Instalação)

CRIANDO BANCOS DE DADOS NO SQL SERVER 2008 R2 COM O SQL SERVER MANAGEMENT STUDIO

Guia de conexão na rede wireless

Omega Tecnologia Manual Omega Hosting

Manual de configuração do sistema

Sistema de Controle de Cheques GOLD

REP idx. Manual de integração com Ponto Secullum 4

Índice. Para encerrar um atendimento (suporte) Conversa Adicionar Pessoa (na mesma conversa)... 20

Manual do Google agenda. criação e compartilhamento de agendas

Será exibido um painel de opções com 3 possibilidades: Cadastrar Cliente, Listagem de Cliente e Gerar Chave de Instalação.

SCPI 8.0. Novas funcionalidades. Conciliação Bancária Automática:

Manual de Instalação e Configuração do SQL Express

SAC Sistema de Acompanhamento de Concessões Manual do Usuário

Guia Site Empresarial

Procedimentos para Reinstalação do Sisloc

GUIA INTEGRA SERVICES E STATUS MONITOR

Configuração para PPPoE ( Autenticação no Modem Modo Router )

MANUAL DO SISTEMA GT WEB CALL. Teledata

FERRAMENTAS DE COLABORAÇÃO CORPORATIVA

Consultório On-line. Tudo o que você precisa em um só lugar.

Manual de Acesso ao Sistema de Gestão de Serviços (SIGServ)

PgAdmin. O pgadmin é um software gráfico para administração do SGBD PostgreSQL disponível para Windows e UNIX.

MANUAL DE UTILIZAÇÃO

PAINEL GERENCIADOR DE S

Satélite. Manual de instalação e configuração. CENPECT Informática cenpect@cenpect.com.br

C# - Conexão com MySQL

Procedimentos para Instalação do Sisloc

Tutorial Plone 4. Manutenção de Sites. Universidade Federal de São Carlos Departamento de Sistemas Web Todos os direitos reservados

Se você possui uma tomada de telefone no padrão TeleBrás siga este diagrama:

Manual de Utilização Portal de Serviços do Inmetro nos Estados - PSIE

MANUAL DO GERENCIADOR ESCOLAR WEB

Cenários do CEL. Acessar ao sistema

INSTALAÇÃO DO CHEF FOODS NET

MANUAL DO PROESC EDUCACIONAL

Como atualizar os preços da ABCFarma.

Passo a Passo da instalação da VPN

BLACKBERRY - PME e PL Passo a Passo Registro Site BIS BlackBerry PME e Profissional Liberal

DSL-500B Configuração modo Router PPPoE

3. No painel da direita, dê um clique com o botão direito do mouse em qualquer espaço livre (área em branco).

GERENCIADOR DE CONTEÚDO

Resolvendo problemas de conexão de rede wireless no pregão 83/2008

Sistema de Automaçaõ de Vendas Manual Passo a Passo

Portal Sindical. Manual Operacional Empresas/Escritórios

NetEye Guia de Instalação

Manual do Usuário CFCWeb BA

1. Escritório Virtual Atualização do sistema Instalação e ativação do sistema de Conexão...5

Trabalhando com conexão ao banco de dados MySQL no Lazarus. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA

Microsoft Visual Studio 2010 C# Volume II

Manual do Usuário ipedidos MILI S.A. - D.T.I.

QUALIDATA Soluções em Informática. Módulo CIEE com convênio empresas

Manual de uso do aplicativo Filho Sem Fila

Neste Manual. Acessando o PDV - PAF 3

Print Audit 6 - Instalação do SQL Server 2008 express R2

Backup e Restauração de curso do Moodle. Compartilhamento Banco de Cursos Justiça do Trabalho

TUTORIAL: MANTENDO O BANCO DE DADOS DE SEU SITE DENTRO DO DOMÍNIO DA USP USANDO O SSH!

Índice: CMS 3 O que é Content Management System? Clientes 4 O que é o Cliente? 4 Configurando o i-menu/i-view para trabalhar. com o CMS.

INSTALANDO SQL SERVER 2008

Procedimentos de Implantação ireport x Protheus

AR PDV SOLUÇÕES AR CONSULTORIA EM INFORMÁTICA

Revisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL

SISTEMA DE E-LEARNING. efaculdade MANUAL DO ALUNO

Instalando servidor Apache com MySQL e as linguagens ColdFusion e PHP. XAMPP (xampp-win installer.exe), veja aqui.

Instalando e Atualizando a Solução Arquivos de Instalação Instalação do Servidor de Aplicação Instalação JDK...

Ministério da Cultura

AULA 06 CRIAÇÃO DE USUÁRIOS

Criando Banco de Dados, Tabelas e Campos através do HeidiSQL. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

FERRAMENTAS DE COLABORAÇÃO CORPORATIVA

Aparecerá a tela abaixo:

Manual de Publicaça o no Blog da Aça o TRIBOS nas Trilhas da Cidadania

1ª PARTE DIÁRIOS ELETRÔNICOS

MANUAL DO ANIMAIL Terti Software

SIE - SISTEMA DE INFORMAÇÕES PARA O ENSINO CADASTRO DE FUNCIONÁRIOS

ROTEIRO PARA INSTALAÇÃO DO BITVISE, CONFIGURAÇÃO DE CHAVES SSH, DEFINIÇÃO DAS PORTAS PARA OS TÚNEIS SSH E CONFIGURAÇÃO DO THUNDERBIRD

Levantamento de Requisitos

CONFIGURAÇÃO MINIMA EXIGIDA:

Manual SAGe Versão 1.2 (a partir da versão )

MANUAL DO USUÁRIO. Software de Ferramenta de Backup

MANUAL PRÁTICO DE INSERÇÃO PROJETO DE TUTORIA ACADÊMICA

Manual Signext Card Explorer

Sistema Ativo de Segurança Automotiva Manual de Utilização

Manual do usuário. Mobile Auto Download

CRIANDO O SEU CURRÍCULO LATTES

Cadastros no Portal Positivo.

CAPÍTULO 8 Conexões de banco de dados para programadores ASP.NET

NetEye Guia de Instalação

1. Introdução pág.3 2. Apresentação do sistema Joomla! pág.4 3. Acessando a administração do site pág.4 4. Artigos 4.1. Criando um Artigo 4.2.

V.1.0 SIAPAS. Sistema Integrado de Administração ao Plano de Assistência à Saúde. Contas Médicas

Transcrição:

Gerenciando usuários do SQL Server com C# Fernando Datorre Setembro 2012 Um tema antigo na vida dos programadores se refere ao login dos usuários em seus sistemas. O que geralmente encontramos, quase sempre, são desdobramentos da mesma solução: o programador cria as tabelas de usuários no seu banco de dados (com informações nome, login senha e direitos) e solicita que o mesmo digite esses dados de login na primeira tela do programa, validando ou não sua entrada. Quase sempre, por de trás dos panos, o programador se utiliza da conta de super usuário existente (sa, sysadmin, root) para execução dos comandos t-sql. Esta solução, apesar de fácil e comum, esconde alguns problemas posteriores: Falta de segurança: o programador ou dba nunca sabe quem executou os comandos no banco, já que apenas uma instancia do usuário padrão está sendo usada. Logs: os logs (históricos das operações) precisam que ser feitos (executados) via programa e não automaticamente pelo banco, isso deve-se a mesma questão citada acima, haverá sempre o mesmo usuário logado para todas as pessoas. Na tentativa de minimizar esses problemas, uma das soluções seria integrar a aplicação ao sistema de segurança do próprio banco de dados, exigindo que cada usuário realize o login com seus dados de acesso a cada vez que for usar o programa. Cada banco tem suas diretrizes de segurança, vou me ater ao Microsoft SQL Server que já trabalho a algum tempo. A Solução Para realizar a integração de maneira transparente, estabelecemos como meta a criação de uma aplicação que possibilite listar, criar, excluir, dar e tirar permissão de acesso a um usuário diretamente no aplicativo (no caso aqui programado em C#). Esta aplicação desenvolvida será utilizada para exemplificação das ideias (é um projeto apenas conceitual para este artigo): Listar os Logins existentes O primeiro passo é listar os logins existentes no banco. Você poderia utilizar um código semelhante a este: void UsersList() string strconnsa = @"Data Source=FERNANDO-NOTE\SQL08;Initial Catalog=Master;User ID=sa; Password=123"; SqlConnection conn = new SqlConnection(strConnSA); SqlCommand cmd = new SqlCommand(); cmd = new SqlCommand("select name as loginuser, createdate, updatedate from master..syslogins", conn); cmd.commandtype = CommandType.Text; SqlDataAdapter adapter = new SqlDataAdapter(cmd); DataTable table = new DataTable(); adapter.fill(table); loginsdatagridview.datasource = table; qtdelabel.text = "Registros: " + table.rows.count.tostring(); MessageBox.Show(String.Format("0: 1", ex.number, ex.message), ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); Gerenciando usuários do SQL Server com C#- Fernando Datorre Setembro 2012 Página 1 de 7

O resultado seria mais ou menos assim: O objetivo aqui não é discutir código C# e sim os comandos que usaremos para realizar as operações. No caso, o importante é o select na tabela syslogins para mostrar os logins já criados no banco. Esta mesma consulta é utilizada no própria ferramenta de gerenciamento do SQL Server: Gerenciando usuários do SQL Server com C#- Fernando Datorre Setembro 2012 Página 2 de 7

Login de um usuário: Para realizar o login, basta passar os dados do usuário e abrir a conexão, caso ele não exista ou não seja permitido, uma exceção será lançada. /// Método que realiza o login com os dados repassados /// <param name="username">usuário que se deseja realizar o login</param> /// <param name="password">senha do usuário</param> private void UserLogin(String username, String password) string strconnuser = "Data Source=Fernando-Note\\SQL08;Initial Catalog=Master;User ID=" + username + ";Password=" + password + ""; SqlConnection conn = new SqlConnection(strConnUser); //tenta abrir a conexão.. se não conseguir vai dar erro MessageBox.Show("Login efetuado com sucesso!", ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); if (ex.number == 18456) MessageBox.Show("Usuário ou senha inválido!", ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning); else if (ex.number == 18488) MessageBox.Show("Usuário precisa alterar a senha.", ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning); else MessageBox.Show(String.Format("0: 1", ex.number, ex.message), ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); Para ilustrar tentamos consultar um usuário que ainda não foi criado. Procurando o usuário teste com a senha 123 é exibido a mensagem de usuário não encontrado: Gerenciando usuários do SQL Server com C#- Fernando Datorre Setembro 2012 Página 3 de 7

Criando um Login de Usuário O código para inserir um login é divido em duas partes. Na primeira o login é criado e na segunda é registrado o direito de acesso do mesmo. Cabe aqui ressaltar que, dependendo da maneira que você quer que seus usuários interajam com o banco de dados, direitos com mais ou menos acesso podem ser definidos. Faça uma pesquisa pela documentação do SQL Server para saber mais a respeitos de logins e regras (roles) de acesso. /// Método que cria um novo usuário no SQL Server /// <param name="username">usuário que se deseja criar o login</param> /// <param name="password">senha do usuário</param> private void UserInsert(String username, String password) SqlConnection conn = new SqlConnection("Data Source=Fernando-Note\\SQL08;Initial Catalog=Master;Integrated Security=True"); // Creating a login specific to SQL Server. SqlCommand cmd = new SqlCommand("CREATE LOGIN " + username + " WITH PASSWORD=N'" + password + "', DEFAULT_DATABASE=SimpleClinic, DE FAULT_LANGUAGE=us_english, CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF", conn); //executa os direitos de acesso cmd = new SqlCommand("EXEC sys.sp_addsrvrolemember @loginame = N'" + username + "', @rolename = N'sysadmin'", conn); MessageBox.Show("Login Criado com sucesso!", ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); Close(); if (ex.number == 15025) MessageBox.Show("Login já existe.", ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning); else MessageBox.Show(String.Format("0: 1", ex.number, ex.message), ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); Depois de preencher os dados e salvar: Resultado mostrado no SQL Management Studio Se tentarmos fazer o login no SQL Server do usuário criado notamos que já está tudo ok: Gerenciando usuários do SQL Server com C#- Fernando Datorre Setembro 2012 Página 4 de 7

Alterando a Senha de Um Usuário: Para alterar a senha de login do usuário, o comando é simples. Neste caso, montamos antes apenas um código de verificação para garantir que não seja trocada a senha de um usuário sem o consentimento do mesmo. /// Método que altera a senha de um usuário /// <param name="username">usuário</param> /// <param name="pwdold">senha atual - antiga</param> /// <param name="pwdnew">nova senha desejada</param> private void UserUpdatePwd(String username, String pwdold, String pwdnew) string strconnuser = @"Data Source=FERNANDO-NOTE\SQL08;Initial Catalog=Master;User ID=" + username + "; Password=" + pwdold; string strconnsa = @"Data Source=FERNANDO-NOTE\SQL08;Initial Catalog=Master;User ID=sa; Password=123"; SqlConnection conn = new SqlConnection(); SqlCommand cmd = new SqlCommand(); //abre a conexão...se der certo a senha e o usuário atual estão ok conn = new SqlConnection(strConnUser); //está ok, agora abre a conexão com o usuário SA para alterar conn = new SqlConnection(strConnSA); cmd = new SqlCommand("ALTER LOGIN " + username + " WITH PASSWORD = '" + pwdnew + "'", conn); //executa a alteração MessageBox.Show("Senha de Login Alterada com sucesso!", ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); Close(); if (ex.number == 15025) MessageBox.Show("Login já existe.", ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning); else MessageBox.Show(String.Format("0: 1", ex.number, ex.message), ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); Gerenciando usuários do SQL Server com C#- Fernando Datorre Setembro 2012 Página 5 de 7

Habilitando e desabilitando um Login Podemos habilitar ou desabilitar o acesso de um usuário de forma muito simples, vejamos: /// Método que Habilita ou desabilita um usuário /// <param name="username">usuário desejado</param> /// <param name="enable">habilitar ou não o usuário</param> private void EnableDisableUser(String username, Boolean enable) string strconnsa = @"Data Source=FERNANDO-NOTE\SQL08;Initial Catalog=Master;User ID=sa; Password=123"; SqlConnection conn = new SqlConnection(); SqlCommand cmd = new SqlCommand(); conn = new SqlConnection(strConnSA); cmd = new SqlCommand("ALTER LOGIN " + username + " " + (enable? "ENABLE" : "DISABLE"), conn); //executa a alteração MessageBox.Show("Login " + (enable? "Habilitado" : "Desabilitado") + " com sucesso!", ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); Close(); MessageBox.Show(String.Format("0: 1", ex.number, ex.message), ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); Para conferirmos se o comando realmente funciona na prática, vamos o teste: Gerenciando usuários do SQL Server com C#- Fernando Datorre Setembro 2012 Página 6 de 7

Excluindo um Login Na aplicação teste disponível no site http://www.simplesistemas.com.br/aplicativos você pode ver todos os códigos usados e algumas funcionalidades que deixei de fora deste artigo, como, por exemplo, o DROP que é usado excluir um login. Conclusão Nos códigos e telas acima tentamos exercitar alguns conceitos que podem enriquecer seus códigos ou auxiliar em algum a tarefa que estejam realizando. É claro que nos prendemos a códigos mais simples do que serão usados em aplicações comerciais, devido, principalmente, as regras de negócio envolvidas, porém, estes códigos são as bases de integração entre seus aplicativos e o banco de dados. A ideia apresentada aqui é criar uma nova forma de controle dos seus acessos, com mais segurança e simplificando algumas tarefas penosas do dia a dia. Espero que os códigos seja de alguma ajuda. [] s Fernando Datorre Microsoft.Net C# Architect Simple Sistemas 17 3421-4525 fernando@simplesistemas.com.br Gerenciando usuários do SQL Server com C#- Fernando Datorre Setembro 2012 Página 7 de 7