
Estou procurando uma maneira de armazenar uma senha de banco de dados na máquina de trabalho para que meu próprio aplicativo possa lê-la (para se conectar ao banco de dados), mas um usuário sem direitos de administração não possa lê-la. Deve ser possível a um administrador alterar a senha, de preferência automaticamente.
O que tenho em mente é algo comoArquivo .pgpass para PostgreSQLem um ambiente Linux. Isso também é possível em um ambiente Windows?
Acho que o arquivo de senha pode ser acessível apenas para administradores. Mas um programa executável para o usuário também pode acessar esse arquivo? Além disso, é possível, com a ajuda de políticas de grupo, distribuir esse arquivo pela rede?
Outras soluções que estou pensando (provavelmente com mais esforço):
- Criptografe o arquivo de senha. Somente o aplicativo e os administradores possuem as chaves válidas para descriptografar e alterar/ler o arquivo.
- Recupere a senha de um recurso de rede, provavelmente criptografado também.
Responder1
Em resposta à sua pergunta sobre apenas acesso de administrador-
O Windows executa serviços com as permissões do usuário (a menos que você execute especificamente como administrador ou um usuário diferente); portanto, se o usuário não tiver acesso a um arquivo, o programa também não terá.
Em resposta à pergunta de política de grupo-
Sim, você pode usar a política de grupo para distribuir arquivos por meio das Preferências de Política de Grupo. (Ver:https://www.adamfowlerit.com/2016/07/group-policy-preferences-replace-existente-file/)
Responder2
Se alguém estiver interessado: eu encontrei a seguinte solução.
A senha é armazenada criptografada em um arquivo XML (o "contêiner de senha"). O contêiner pode ser aberto e editado com uma senha de administrador. A criptografia é simétrica. O contêiner é colocado em um recurso de rede, simplesmente dentro de um diretório de rede.
O aplicativo recebe a localização do contêiner de senha e é capaz de abri-lo porque a senha do administrador está depositada no código.
Eu sei que esta solução não é 100% segura porque as senhas não devem ser armazenadas no código. Porém, para esses requisitos (a senha do banco de dados deve ficar oculta do usuário, a senha do banco de dados deve ser administrável), a solução é boa o suficiente.