none
Segurança - MySql, acesso RRS feed

  • Pergunta

  • Bom dia
    Estou desenvolvendo uma ferramenta que vai acessar o banco de dados MySql, gostaria de saber qual a melhor forma de acessar o banco de dados, isto é, aonde guardar as credenciais de acesso do banco, qual o melhor caminho, é um arquivo texto, registro, app.config, etc.

    É possível utilizar as credenciais do Windows para acessar o banco de dados.

    A ferramenta é Windows Form, estou utilizando VB.Net, a ferramenta será utilizada por uns 50 usuários.

     
    quarta-feira, 13 de junho de 2018 09:36

Respostas

  • Não sei informar se o MySQL trabalha com token de acesso.

    Todavia isso independe do método de acesso (conector ou ODBC).

    O que você pode fazer também é inserir usuário e senha dentro do seu código (fica mais protegido), mas ainda assim o usuário pode fazer um disassembly com .Net Reflector por exemplo.

    Outro ponto. Se você conseguir gerar um token, o usuário também pode utiliza-lo para acessar indevidamente a base se essa é a sua preocupação.

    Não sei se você está utilizando o usuário administrador para conectar na base de dados, se assim for, aconselho como boa prática, criar um usuário exclusivo para aplicação e conceder as permissões necessárias.

    OBS: Uma outra saída (se possível), é você construir uma WEB.API, hospedá-la em algum HOST (WEB) e fazer com que sua aplicação acesse a WEB.API, removendo então qualquer credencial da aplicação.

    Espero ter ajudado.

    Anderson.


    quarta-feira, 13 de junho de 2018 12:42
  • Irei criar um usuário especifico para acessar a base de dados, pois neste banco de dados irão ter várias outras bases.

    Vou pensar no caso de colocar as credenciais dentro do próprio código, pois assim é mais dificil do usuário ter acesso.

    Valeu

    • Marcado como Resposta Venildo Amaral quarta-feira, 13 de junho de 2018 18:47
    quarta-feira, 13 de junho de 2018 18:22

Todas as Respostas

  • Bom dia, você pensou em usar o ODBC para realizar essa manobra?

    Dê uma olhada nessa documentação:
    https://dev.mysql.com/downloads/connector/odbc/

    Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.


    quarta-feira, 13 de junho de 2018 11:03
  • Não tenho muita experiência com banco de dados relacional, quase sempre trabalhei com Access.

    Como que faria para utilizar ODBC para os usuários se conectarem?

    Tem algum link que explica isso?

    quarta-feira, 13 de junho de 2018 11:22
  • Olá Venildo, bom dia.

    Uma boa saída é você utilizar o conector MySQL direto, sem a necessidade de utilizar ODBC, visto que dessa forma (com ODBC), você inclui uma camada a mais de comunicação. Funciona? Sim, mas pode ser melhor.

    No caso do Mysql, você tem um conector direto para uso do SGBD: https://dev.mysql.com/downloads/connector/net/

    Dai pra frente é só referenciar a DLL em seu projeto e instanciar conexões, commands, transactions (assim como você faz com SQLServer).

    ODBC é sim muito bom, principalmente quando não há um conector direto. Exemplo: Se você não tem um conector para JAVA, mas tem uma aplicação em JAVA, o ODBC é a saída!

    Enfim, respondendo então a outra parte da sua pergunta. As configurações de conexão você pode inserir em seu arquivo de configuração (app.config para Windows.Forms ou Console.Application), (Web.Config para aplicações Web.Forms/MVC).

    A solução ficaria assim (considerando que você já tenha incluído a referencia do conector em seu projeto).

    using MySql.Data.MySqlClient;
    
    .
    .
    .
    
            internal MySqlConnection getConexaoBD()
            {
                //obtem a string de conexão do App.Config e retorna uma nova conexao
                String strConexao = ConfigurationManager.ConnectionStrings["stringConexao"].ConnectionString;
                return new MySqlConnection(strConexao);
            }
    
    
            public <SEURETORNO> GetRecord(long ID)
            {
                // VARIÁVEIS
                // VARIÁVEIS
                // VARIÁVEIS
                MySqlConnection conn;
    
                try
                {
    
                    // SEU CÓDIGO SQL...
                    using (conn = getConexaoBD())
                    {
                        conn.Open();
                        MySqlCommand Commando = new MySqlCommand("<SUA STRING SQL>", conn);
                        MySqlDataReader rdr = Commando.ExecuteReader();
    
                        // AQUI VOCÊ COMPÕE SEU RETORNO...
                        conn.Close();
                    }
    
                    return // VALORES ENCONTRADOS...
                }
                catch (Exception ex)
                {
                    // TRATAMENTO DA EXCEPTION...
                }
            }
    

    E no arquivo de configuração, você insere:

        <connectionStrings>
            <add name="StringConexao" connectionString="Data Source=127.0.0.1; Database=SEU_DB; User Id=USUARIO_MYSQL; Password=SENHA_MYSQL; pooling=false; Allow Zero DateTime = false; Convert Zero Datetime = false;" />
        </connectionStrings>
    

    Espero ter ajudado.

    POR FAVOR NÃO ESQUEÇA DE  MARCAR A RESPOSTA COMO ÚTIL CASO TENHA LHE AJUDADO (ISSO É MUITO IMPORTANTE).

    Um abraço e boa sorte!

    Anderson.

    quarta-feira, 13 de junho de 2018 11:52
  • MAs a minha dúvida é o seguinte, esse arquivo fica na máquina do usuário e ele pode acessar, pois é um arquivo texto, correto?

    Logo ele vai ter os dados de acesso ao banco de dados.

    O ambiente que vai rodar essa aplicação alguns usuários não são confiáveis, queria uma forma de evitar que os usuários tivesse acesso as credenciais, teria como criptografar esse arquivo?

    Tem uma outra forma?

    quarta-feira, 13 de junho de 2018 12:13
  • Não sei informar se o MySQL trabalha com token de acesso.

    Todavia isso independe do método de acesso (conector ou ODBC).

    O que você pode fazer também é inserir usuário e senha dentro do seu código (fica mais protegido), mas ainda assim o usuário pode fazer um disassembly com .Net Reflector por exemplo.

    Outro ponto. Se você conseguir gerar um token, o usuário também pode utiliza-lo para acessar indevidamente a base se essa é a sua preocupação.

    Não sei se você está utilizando o usuário administrador para conectar na base de dados, se assim for, aconselho como boa prática, criar um usuário exclusivo para aplicação e conceder as permissões necessárias.

    OBS: Uma outra saída (se possível), é você construir uma WEB.API, hospedá-la em algum HOST (WEB) e fazer com que sua aplicação acesse a WEB.API, removendo então qualquer credencial da aplicação.

    Espero ter ajudado.

    Anderson.


    quarta-feira, 13 de junho de 2018 12:42
  • Irei criar um usuário especifico para acessar a base de dados, pois neste banco de dados irão ter várias outras bases.

    Vou pensar no caso de colocar as credenciais dentro do próprio código, pois assim é mais dificil do usuário ter acesso.

    Valeu

    • Marcado como Resposta Venildo Amaral quarta-feira, 13 de junho de 2018 18:47
    quarta-feira, 13 de junho de 2018 18:22
  • OK.

    Se a informação lhe ajudou, por favor, marque a resposta como útil. Isso é muito importante.

    Um abraço.

    Anderson.

    quarta-feira, 13 de junho de 2018 18:25