none
Tirar a senha do BD do connectiostring eapp.config RRS feed

  • Pergunta

  • Ola pessoal, estou perguntando aqui como último recurso, após umas 6 horas de pesquisa ontem. 

    Tenho um banco de dados em access com senha, crio meu dataset via design e tudo funciona perfeito.

    Meu objetivo é retirar a senha do connectionstring e consequentemente do app.config, vi dezenas de tutoriais e alternativas pra fazer isso e não teve jeito, o método que eu gostaria de fazer (que não é o mais seguro), é usar váriaveis na connectionstring e de preferencia sem precisar usar o oledbconnectionstringbuilder(string). ]

    Ontem tentei criar a connectionstring via builder mas sem sucesso. Talvez seja o ponto do codigo que estou chamando a função, em form1_load(), antes do codigo pronto chamadar o metodo fill pro dataset.

     

    Espero que tenha me feito entender e no aguardo de ajuda.

     

    abs

    Fabricio Melo

    terça-feira, 3 de janeiro de 2012 11:53

Respostas

  • Olá Fabrício,

    Esse objeto chamado escalaTableAdapter é de que tipo?

    Se for um  TableAdapter (como aparenta ser) é possível mudar a string de conexão.

                string connectionString = ConfigurationManager.ConnectionStrings["WindowsFormsApplication1.Properties.Settings.DatabaseConnectionString"].ConnectionString;
                OleDbConnectionStringBuilder builder = new OleDbConnectionStringBuilder(connectionString);
    
                builder["password"] = "senha";
    
                connectionString = builder.ConnectionString;
               
                this.escalaTableAdapter.Connection = new OleDbConnection(connectionString);
                this.escalaTableAdapter.Fill(this.databaseDataSet.Escala);
    

    Do modo como vc esta fazendo vc esta alterando a conexão em memória, mas não esta fazendo nada mais além disso, pois essas alterações não estão sendo refletivas nos seus objetos de mapeamento dos dados.

    Referência:

    http://weblogs.asp.net/rajbk/archive/2007/05/26/changing-the-connectionstring-of-a-wizard-generated-tableadapter-at-runtime-from-an-objectdatasource.aspx

     

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    • Marcado como Resposta Fabricio Melo quarta-feira, 4 de janeiro de 2012 16:17
    terça-feira, 3 de janeiro de 2012 15:36
    Moderador

Todas as Respostas

  • Criptografia a string de conexão não é uma boa?

    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    terça-feira, 3 de janeiro de 2012 12:03
  • Olá Fabricio,

    Com o OledbConnectionStringBuilder é mais facil, um modo de fazer é assim:

    Configure sua string de conexão dessa forma:

    No App.Config

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <connectionStrings>
        <add name="_default" connectionString="Server=myAddress;Database=myDataBase;UID=myUsername;"/>
      </connectionStrings>
    </configuration>
    


    No seu código:

                string connectionString = ConfigurationManager.ConnectionStrings["_default"].ConnectionString;
                OleDbConnectionStringBuilder builder = new OleDbConnectionStringBuilder(connectionString);
    
                builder["password"] = "xpto";
    
                connectionString = builder.ConnectionString;
    


    Veja que a senha ficou fora da string de conexão e esta sendo informada via código.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    terça-feira, 3 de janeiro de 2012 12:20
    Moderador
  • Olá Fernando e Paulo

    Paulo: Como eu disse, escolhi a alternativa mais conveniente no momento e nao vou usar criptografia por enqto.

    Fernando:

    como eu disse, ja tinha tentado com builder bem da forma que voce colocou, mas da erro "senha invalida", como se nao aceitasse a alteração do builder.

    Estou desconfiado de duas coisas:

    1- Pelo fato de eu ter usado o Wizard, pode haver várias implementações da connectionstring em outros pontos do código, já que nao criei o dataset manualmente (nem tenho a intenção por enqto).

    2-o local que tento usar o builder, to escrevendo no load() do form1, antes de carregar metodos fill() do dataset.

     

    vou passar aqui minha connectionstring e meu form1.load() pra ver se ajuda.

     private void Form1_Load(object sender, EventArgs e)
            {
                string connectionString = ConfigurationManager.ConnectionStrings["WindowsFormsApplication1.Properties.Settings.DatabaseConnectionString"].ConnectionString;
                OleDbConnectionStringBuilder builder = new OleDbConnectionStringBuilder(connectionString);
    
                builder["password"] = "senha";
    
                connectionString = builder.ConnectionString;
               
                // TODO: This line of code loads data into the 'databaseDataSet.Escala' table. You can move, or remove it, as needed.
                this.escalaTableAdapter.Fill(this.databaseDataSet.Escala);
    
            }

     
    <?xml version="1.0" encoding="utf-8" ?>
    <connectionStrings>
      <add name="WindowsFormsApplication1.Properties.Settings.DatabaseConnectionString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Database.accdb"
            providerName="System.Data.OleDb"/>
    </connectionStrings>

     

    abs

    Fabricio Melo

    terça-feira, 3 de janeiro de 2012 15:18
  • Olá Fabrício,

    Esse objeto chamado escalaTableAdapter é de que tipo?

    Se for um  TableAdapter (como aparenta ser) é possível mudar a string de conexão.

                string connectionString = ConfigurationManager.ConnectionStrings["WindowsFormsApplication1.Properties.Settings.DatabaseConnectionString"].ConnectionString;
                OleDbConnectionStringBuilder builder = new OleDbConnectionStringBuilder(connectionString);
    
                builder["password"] = "senha";
    
                connectionString = builder.ConnectionString;
               
                this.escalaTableAdapter.Connection = new OleDbConnection(connectionString);
                this.escalaTableAdapter.Fill(this.databaseDataSet.Escala);
    

    Do modo como vc esta fazendo vc esta alterando a conexão em memória, mas não esta fazendo nada mais além disso, pois essas alterações não estão sendo refletivas nos seus objetos de mapeamento dos dados.

    Referência:

    http://weblogs.asp.net/rajbk/archive/2007/05/26/changing-the-connectionstring-of-a-wizard-generated-tableadapter-at-runtime-from-an-objectdatasource.aspx

     

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    • Marcado como Resposta Fabricio Melo quarta-feira, 4 de janeiro de 2012 16:17
    terça-feira, 3 de janeiro de 2012 15:36
    Moderador
  • Opa Fernando,

     

    dei uma olhada no artigo e fiz umas tentativas mas nao consegui, ta dando o erro 

     

    "System.Data.OleDb.OleDbException was unhandled

      Message=Não é possível iniciar o aplicativo. O arquivo de informações do grupo de trabalho está faltando ou foi aberto em modo exclusivo por um outro usuário."

     

    abs

    Fabricio Melo

     

    terça-feira, 3 de janeiro de 2012 16:11
  • Esse problema ocorre quando a senha não é passada por parâmetro na connectionstring.

    Poderia postar seu código atual?

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    quarta-feira, 4 de janeiro de 2012 00:12
    Moderador
  • Opa Fernando e André,

    desde ontem tava tentando tirar aquela mensagem e acho que finalmente consegui resolver.

    a sua dica de usar o objeto tableadapter me abriu uma luz e fui pesquisar nessa direção, achei esse post http://thecodemonk.com/2008/02/18/tableadapter-connection-strings/ e aqui muita gente nos comentarios reclama da mesma coisa que eu e a solução apresentada achei meio hardcore, tentei implementar sem sucesso.

    mas ao refazer o projeto pedi para o wizard nao criar o arquivo de configuração e usando o seu codigo pra criar a string manualmente funcionou perfeito. parece que o problema era o que eu descofiava, o wizard criava codigo para uso exclusivo da conexao.

    vou passar como ficou meu codigo:

     

    private void Form1_Load(object sender, EventArgs e)
            {
                                       
                OleDbConnectionStringBuilder conString = new OleDbConnectionStringBuilder();
                conString.Provider = "Microsoft.ACE.OLEDB.12.0";
                conString.DataSource = "|DataDirectory|\\Database.accdb";
                conString.Add("Jet OLEDB:Database Password", "senha");
                string connectionString = conString.ConnectionString;
                this.escalaTableAdapter.Connection = new OleDbConnection(connectionString);
    
                // TODO: This line of code loads data into the 'databaseDataSet.Escala' table. You can move, or remove it, as needed.
                this.escalaTableAdapter.Fill(this.databaseDataSet.Escala);
    
            }
    

    e fiquei sem o arquivo app.config

     

    Muito obrigado pelas prontas respostas!

     


    quarta-feira, 4 de janeiro de 2012 16:16