none
String de conexão de acordo com o cliente RRS feed

  • Pergunta

  • Olá,

    Na página de login, além de colocar o usuário e a senha, o cliente coloca o código da empresa dele pois vários clientes acessam a mesma página.

    A string de conexão deve ser montada de forma diferente pra cada usuário, pois clientes de empresas diferentes devem logar em databases diferentes.

    Qual é a melhor forma de guardar esse código da empresa? Na sessão?

    O sistema é em 3 camadas, e as conexões são abertas e fechadas a cada comando. Então não gostaria nem de ficar passando como parâmetro esse código entre as camadas e nem de acessar a sessão diretamente da camada de acesso a dados para pegar o código.

    Alguém tem uma alternativa diferente dessas citadas?

    Agradeço desde já pela atenção.

    Abraços

    quinta-feira, 20 de julho de 2006 00:37

Respostas

  • Olá Marcos,

    Você pode se valer da proriedade UserData caso esteja usatilziado formautentication para realizar isso. Os dados são salvos junto com ticket de auteticação  criptografados e podem ser recuperados como no exemplo abaixo :"

     

    if Context.Request.IsAuthenticated

    Dim id As FormsIdentity = CType(Context.User.Identity, FormsIdentity)

    Dim ticket As FormsAuthenticationTicket = id.Ticket

    _nome = ticket.Name

    Dim InfoArrayList As New ArrayList

    Dim Info As String

    For Each Info In ticket.UserData.Split(New Char() {";"c})

    If Info <> "" Then

    InfoArrayList.Add(Info)

    End If

    Next

    End If

    Obs : no exemplo existem varias informações sepradas por delimitador (;)

    Obs2: Nunca guarde sua string de conexão fora de um local seguro , o ideal e ter um parametro que informe como possa recuperar como por exemplo o nome de um arquivo de configuração e usar o App.block de configuração para ler seus dados de acordo com os dados recuperados.

     

    sexta-feira, 21 de julho de 2006 14:28

Todas as Respostas

  • Marcos,

    A sessão é um bom lugar sim. Poderia também ser um cookie, mas de qualquer forma, você vai precisar a cada POST saber quem é e daí saber qual é o banco.

    Vc  pode sempre passar como parâmetro a Empresa para facilitar a camada que vai fazer acesso à base de dados dele.

    Outra idéia é fazer algum truque com a sua infra estrutura (por exemplo, tentar personificar uma conta para que a camada seguinte, ao reconhecer a chamada desta conta identifique o banco a ser usado).

    []'s

    quinta-feira, 20 de julho de 2006 14:41
  • Olá Marcos,

    Você pode se valer da proriedade UserData caso esteja usatilziado formautentication para realizar isso. Os dados são salvos junto com ticket de auteticação  criptografados e podem ser recuperados como no exemplo abaixo :"

     

    if Context.Request.IsAuthenticated

    Dim id As FormsIdentity = CType(Context.User.Identity, FormsIdentity)

    Dim ticket As FormsAuthenticationTicket = id.Ticket

    _nome = ticket.Name

    Dim InfoArrayList As New ArrayList

    Dim Info As String

    For Each Info In ticket.UserData.Split(New Char() {";"c})

    If Info <> "" Then

    InfoArrayList.Add(Info)

    End If

    Next

    End If

    Obs : no exemplo existem varias informações sepradas por delimitador (;)

    Obs2: Nunca guarde sua string de conexão fora de um local seguro , o ideal e ter um parametro que informe como possa recuperar como por exemplo o nome de um arquivo de configuração e usar o App.block de configuração para ler seus dados de acordo com os dados recuperados.

     

    sexta-feira, 21 de julho de 2006 14:28
  • Fernando, mas como eu alimentaria o UserData?

    Na hora de autenticar eu crio o FormsAuthenticationTicket e seto o UserData da forma que eu quiser? Colocando por exemplo o código da empresa, o nome do usuário, etc...tudo separado por ";"? Essa é a forma correta de trabalhar?

    Outra coisa, isso eu estou fazendo no web site, mas a minha solution está com outros projetos, e um deles é o responsável pelo acesso a dados, mas é do tipo class library e eu não consigo compartilhar o Context pra pegar diretamente essas informações do UserData, correto? Ai eu teria que passar tudo por parâmetro entre os projetos (camadas).

    Valeu.

    sábado, 22 de julho de 2006 14:04