OperationalError at /admin/
FATAL: Peer authentication failed for user "myuser"
To jest błąd, który otrzymuję, kiedy próbuję dostać się do mojej strony administratora Django. Używałem bazy danych MySQL bez problemu. Jestem nowy w PostgreSQL, ale zdecydowałem się na zmianę, ponieważ host, którego docelowo planuję użyć w tym projekcie, nie ma MySQL.
Dlatego pomyślałem, że mógłbym przejść przez proces instalacji PostgreSQL, uruchomić syncdb
i mieć wszystko ustawione.
Problem polega na tym, że nie mogę połączyć mojej aplikacji z bazą danych. Mogę zalogować się do PostgreSQL za pomocą wiersza poleceń lub aplikacji komputerowej, którą pobrałem. Po prostu nie w scenariuszu.
Mogę również użyć, manage.py shell
aby uzyskać dostęp do bazy danych dobrze.
jakieś pomysły?
źródło
config/database.yml
- to znaczy w tym pliku musiałem dodać linięhost: localhost
(lub gdziekolwiek jest serwer postgres - mój był lokalny)pg_hba.conf
konfiguracja uniemożliwia zwykłym użytkownikom łączenie się przez gniazda UNIX, ale pozwala im przez TCP / IP z lokalnego hosta.local_settings.py
plik i# Set to empty string for localhost. Not used with sqlite3.
znajduje się w ich. KŁAMSTWA !!!Dzieje się tak prawdopodobnie dlatego, że Twój skrypt jest uruchomiony przez innego użytkownika niż ten, z którym próbujesz się połączyć ( tutaj myuser ). W takim przypadku uwierzytelnianie partnera zakończy się niepowodzeniem. Twoje rozwiązanie
HOST: "localhost"
działa, ponieważ nie używasz już uwierzytelniania równorzędnego. Jest to jednak wolniejsze niżHOST: ""
dlatego, że zamiast używać gniazd unix, używasz połączeń TCP. Z dokumentów django :Jeśli chcesz nadal używać gniazd,
pg_hba.conf
potrzebne są prawidłowe ustawienia . Najprostszy to:podczas komentowania wszystkich innych
local
linii w config. Pamiętaj, że aby zmiana zaczęła obowiązywać, potrzebne jest przeładowanie postgresów.Ale jeśli chodzi o maszynę produkcyjną dla wielu użytkowników, możesz chcieć użyć czegoś bezpieczniejszego, takiego jak
md5
(zobacz tutaj wyjaśnienie różnych metod uwierzytelniania).źródło
Lepszym niż pełne zaufanie jest po prostu ustawienie md5.
źródło
Naprawiłem to, edytując dolną część /etc/postgres/9.1/main/pg_hba.conf na (zmieniając md5 na zaufanie; UWAGA oznacza to, że nie będzie hasła do bazy danych, które może nie być tym, czego chcesz)
źródło
Właśnie natknąłem się na ten sam problem, ale chciałem użyć gniazd unix, jak powiedział Clime, ale nadal używając tej
peer
metody. Zmapowałem moją nazwę użytkownika systemu z postgres-username wewnątrz elementupg_hba.conf
, który działa zpeer
metodą.Wewnątrz
pg_hba.conf
dodałem:Wewnątrz
pg_ident.conf
dodałem:źródło