Eu 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ê-lo (para se conectar ao banco de dados), mas um usuário sem direitos de administração não pode lê-lo. Deve ser possível para um administrador alterar a senha, de preferência automaticamente.
O que eu tenho em mente é algo como o arquivo .pgpass para o PostgreSQL em um ambiente Linux. Isso é possível em um ambiente Windows também?
Eu acho que o arquivo de senha pode ser acessível apenas para administradores. Mas pode um programa, que é executável para o usuário, acessar esse arquivo também? Além disso, é possível, com a ajuda de políticas de grupo, distribuir tal arquivo pela rede?
Outras soluções que estou pensando (provavelmente com mais esforço):
- Criptografar o arquivo de senha. Somente o aplicativo e os administradores têm as chaves válidas para descriptografar e alterar / ler o arquivo.
- Recupere a senha de um recurso de rede, presumivelmente criptografado também.
Respostas:
Em resposta à sua pergunta sobre acesso de administrador apenas
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 será executado.
Em resposta à pergunta de política de grupo
Sim, você pode usar a diretiva de grupo para distribuir arquivos por meio das Preferências de Diretiva de Grupo. (Veja: https://www.adamfowlerit.com/2016/07/group-policy-preferences-replace-existing-file/ )
fonte
Se alguém estiver interessado: eu criei 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 o local do contêiner de senha e pode abrir o contêiner de senha, pois a senha do administrador é 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. No entanto, para esses requisitos (a senha do banco de dados deve ser ocultada do usuário, a senha do banco de dados deve ser administrável), a solução é boa o suficiente.
fonte