20 de novembro de 2012

Desacople usuário e senha e compartilhe seu código

Guarde seus arquivos de username e password num diretório separado e dê a eles um nome característico. Por exemplo: sistema_X.mysql.username e sistema_X.mysql.passwd.

Em seus scripts shell, use isso:
username=$(cat /path/para/diretorio/sistema_X.mysql.username)
password=$(cat /path/para/diretorio/sistema_X.mysql.passwd)

Se seu programa for em Python, faça assim:
>>> username = open('/path/para/diretorio/sistema_X.mysql.username').read().strip()
>>> password = open('/path/para/diretorio/sistema_X.mysql.passwd').read().strip()
>>> 

O primeiro motivo pelo qual devemos separar o usuário e a senha dos programas-fonte é diminuir o acoplamento do sistema (ou script, ou programa) em relação ao ambiente de execução.

Em outras palavras, se a senha ou o código de usuário mudarem, você não precisa mexer no seu programa. Afinal, uma mudança tão simples no ambiente não deve implicar em um novo deploy. Mas se eles estiverem hardcoded, isso será inevitável.

O segundo motivo vem como consequência do desacoplamento: segurança. Quem tiver acesso aos seus programas, não terá acesso à senha do seu banco de dados, por exemplo.

O terceiro motivo é alcançado como consequência do primeiro e do segundo: você aumenta a possibilidade de compartilhamento do seu código. Open source, lembra? Deixando os dados de acesso guardados em outro lugar, todos podem te ajudar no desenvolvimento, pela mesma razão do segundo motivo.

Uma alternativa a essa solução seria guardar os arquivos de usuário e senha dentro do seu diretório do projeto e configurar o controle de versões para ignorá-los. Por exemplo, no .gitignore e no .hgignore, no caso do git ou do mercurial.

O risco dessa abordagem é alguém mexer na configuração e seu usuário e senha acabarem versionados indevidamente. Eu, particularmente, prefiro separar mesmo e em um diretório encriptado.

Esse método pode ser usado em qualquer linguagem. O que importa é o princípio de guardar os dados de acesso separados dos programas.

E você, como faz para desacoplar seus sistemas do ambiente de execução, no tocante a códigos de usuário e senhas?

Eu sou Vinicius Assef, um programador do século passado que gosta de Python, pratica Lean Development e acredita em Deus. Você pode me contactar por email ou twitter.

Nenhum comentário:

Postar um comentário

Marcadores