2013-06-17 10 views
8

Jak wiadomo, MUSISZ podać poprawną nazwę bazy danych, nazwę użytkownika i hasło do bazy danych w pliku config/database.yml lub Twoja aplikacja Railsowa nie będzie działać.Bezpieczne dostarczanie hasła do bazy danych w aplikacji Railsowej

W domyślnej konfiguracji twoje hasło znajduje się w pliku tekstowym config/database.yml. Jeśli Twoja aplikacja znajduje się w wolnym repozytorium GitHub, twoje hasło to informacja publiczna. To nie jest realna opcja dla poważnej aplikacji. (To jest w porządku do ćwiczenia samouczka, pod warunkiem, że nie używasz tego hasła do niczego innego.)

Mam rozwiązanie, które zadziałało jak dotąd, ale zastanawiam się, czy jest coś lepszego. Mój wdrożony przykład można zobaczyć pod adresem https://github.com/jhsu802701/bsf.

Co mogę zrobić, to skonfigurować plik config/database.yml, aby programowo wprowadzić nazwę użytkownika i hasło dla środowiska programistycznego. Dla środowiska programistycznego dodaję polecenia do skryptu config/database.yml, aby uzyskać nazwę użytkownika środowiska programistycznego (która jest moją zwykłą nazwą użytkownika dla instalacji Debian Linux, której używam) i puste hasło. (Podaję moją nazwę użytkownika uprawnienia administratora PostgreSQL.) W środowisku produkcyjnym dodaję polecenie w skrypcie wdrażania, który pobiera nazwę użytkownika i hasło z plików znajdujących się w innym miejscu na moim koncie i zapisuje te informacje w pliku config/database.yml.

Czy istnieje lepsze rozwiązanie?

Czy istnieje klejnot z rubinem, który to zakrywa? Jeśli nie, myślę o stworzeniu takiego.

Odpowiedz

16

Sposób, że Heroku robi, a zdecydowana większość innych szyn sklepy są ze zmiennymi ENV

Export dwie zmienne do środowiska,

export POSTGRES_USERNAME='username' 
export POSTGRES_PASSWORD='password' 

następnie w swoim database.yml plikiem, który możesz zrobić

username: <%= ENV['POSTGRES_USERNAME'] %> 
password: <%= ENV['POSTGRES_PASSWORD'] %> 
4

ten sposób robię to działa:

Na terminalu/cmd:

heroku config:set YOUR_DATABASE_PASSWORD=passywordy 

Następnie w pliku /config/database.yml;

production: 
<<: *default 
password: <%= ENV['YOUR_DATABASE_PASSWORD'] %> 

(obszar ten hasło jest generowane automatycznie, gdy stosuje się szyny nowy my_app -d PostgreSQL)

1

na innych niż Heroku eksportować ci zmiennych do środowiska systemu (Linux), wpisując w bash export KEY=value wtedy można nazwać go w Railsach przez ENV['KEY']

np.
w bash:
export CMS_DATABASE_PASSWORD=MySecurePassword
w secrets.yml:
password: <%= ENV['CMS_DATABASE_PASSWORD'] %>

0

Ustawianie zmiennych środowiskowych, jak opisano powyżej w istniejących stanowisk, będzie utrzymywać się tylko zmienne środowiskowe na czas bieżącej sesji powłoki.

Aby ustawić zmienne środowiskowe na stałe, instrukcje export powinny zostać dodane do pliku konfiguracyjnego powłoki. (Następnie uruchom source ~/.bashrc aby zastosować zmiany do bieżącej sesji)

TL; DR: Jeśli używasz bash dodać instrukcję (y) export do ~/.bashrc.

Chociaż powyższe powinno wystarczyć (jeśli używanie BASH na najpopularniejszych dystrybucjach Linuksa), bezbłędnie identyfikując, który plik konfiguracyjny aktualizować dla twojej powłoki może być dość trudny. Poniższy post objaśnia powody i podaje wskazówki dotyczące pliku konfiguracyjnego do edycji.

https://unix.stackexchange.com/questions/117467/how-to-permanently-set-environmental-variables

Powiązane problemy