Skocz do zawartości

Postgresql + Pgadmin Iii


MC'

Rekomendowane odpowiedzi

Witam,

 

Jestem nowicjuszem w temacie więc proszę o wyrozumiałość ;)

Problem:

Chcę móc zarządzać PostgreSQL za pomocą pgAdmina3.

 

1. Zainstalowałem postgtresql + pgadmin3 z repo.

2. zalogowałem się jako root (su -)

3. # service postgresql initdb - inicjalizuje tzw klaster wszystkich tworzonych baz danych

4. # /etc/init.d/postgresql start - uruchomienie bazy

5. # su - postgres i bez hasełko wchodzę sobie do -bash-3.2$ i po wydanieu psql <nazwa bazy> mogę sobie wejść do dowolnej bazy tj: np:

 \l
        List of databases
   Name    |  Owner   | Encoding
-----------+----------+----------
mydb      | postgres | UTF8
postgres  | postgres | UTF8
template0 | postgres | UTF8
template1 | postgres | UTF8

jak widać jestem sobie na razie userem postgres

 

Jedyny plik pg_hba.conf to /usr/share/pgsql/pg_hba.conf.sample i wygląda on (nic tam nie zmieniałem od instalki) tak:

@authcomment@

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

@remove-line-for-nolocal@# "local" is for Unix domain socket connections only
@remove-line-for-nolocal@local   all         all                               @authmethod@
# IPv4 local connections:
host    all         all         127.0.0.1/32          @authmethod@
# IPv6 local connections:
host    all         all         ::1/128               @authmethod@

 

I teraz chciałbym sobie móc zarządzać wszystkimi bazami postgreSQL za pomocą pgAdmina3 bo wydaje mi się to wygodniejsze niż klepanie komendy: psql.

Niestety gdy uruchamiam pgAdmina3 jako już użytkownik systemowy dostaję takie okienko:

server.png

w name i host wpisuję localhost i klikam Ok.. niestey dostaję komunikat o błędzie który niestety jest pusty. Pewnie dlatego że na początku startu phAdmina3 mam infoa że "nie można otworzyć plku tips.txt". No ale koniec końców nie mogę sie połączyć z localhostem i to jest moją bolączką.

Być może jakiegoś settinga nie ustawiłem ale już trochę szykam i nie widz tego .

 

Z góry dzięki za wskazówki i pomoc

 

Pozdro

MC'

 

Odnośnik do komentarza
Udostępnij na innych stronach

Ten plik nie jest czytany, to tylko wzorzec. Prawdziwa kontrola HBA odbywa się przez plik /var/lib/pgsql/data/pg_hba.conf

Skopiuj swój wzorzec w to miejsce i wypełnij, potem restartuj usługę. Domyślny plik kontroli dostępu zaczyna się tak:

# PostgreSQL Client Authentication Configuration File
# ===================================================
#
# Refer to the PostgreSQL Administrator's Guide, chapter "Client
# Authentication" for a complete description.  A short synopsis
# follows.
#
# This file controls: which hosts are allowed to connect, how clients
# are authenticated, which PostgreSQL user names they can use, which
# databases they can access.  Records take one of these forms:
#
# local      DATABASE  USER  METHOD  [OPTION]
# host       DATABASE  USER  CIDR-ADDRESS  METHOD  [OPTION]
# hostssl    DATABASE  USER  CIDR-ADDRESS  METHOD  [OPTION]
# hostnossl  DATABASE  USER  CIDR-ADDRESS  METHOD  [OPTION]
#
# (The uppercase items must be replaced by actual values.)
#
# The first field is the connection type: "local" is a Unix-domain socket,
# "host" is either a plain or SSL-encrypted TCP/IP socket, "hostssl" is an
# SSL-encrypted TCP/IP socket, and "hostnossl" is a plain TCP/IP socket.
#
# DATABASE can be "all", "sameuser", "samerole", a database name, or
# a comma-separated list thereof.
#
# USER can be "all", a user name, a group name prefixed with "+", or
# a comma-separated list thereof.  In both the DATABASE and USER fields
# you can also write a file name prefixed with "@" to include names from
# a separate file.
#
# CIDR-ADDRESS specifies the set of hosts the record matches.
# It is made up of an IP address and a CIDR mask that is an integer
# (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that specifies
# the number of significant bits in the mask.  Alternatively, you can write
# an IP address and netmask in separate columns to specify the set of hosts.
#
# METHOD can be "trust", "reject", "md5", "crypt", "password",
# "krb5", "ident", or "pam".  Note that "password" sends passwords
# in clear text; "md5" is preferred since it sends encrypted passwords.
#
# OPTION is the ident map or the name of the PAM service, depending on METHOD.
#
# Database and user names containing spaces, commas, quotes and other special
# characters must be quoted. Quoting one of the keywords "all", "sameuser" or
# "samerole" makes the name lose its special character, and just match a
# database or username with that name.
#
# This file is read on server startup and when the postmaster receives
# a SIGHUP signal.  If you edit the file on a running system, you have
# to SIGHUP the postmaster for the changes to take effect.  You can use
# "pg_ctl reload" to do that.

# Put your actual configuration here
# ----------------------------------
#
# If you want to allow non-local connections, you need to add more
# "host" records. In that case you will also need to make PostgreSQL listen
# on a non-local interface via the listen_addresses configuration parameter,
# or via the -i or -h command line switches.
#


# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
# local   all         all                               ident sameuser
local   all         all                               md5
#
# IPv4 local connections:
# host    all         all         127.0.0.1/32          ident sameuser
host    all         all         127.0.0.1/32          md5
#

a potem idą rekordy dla poszczególnych układów host/db/user/mask. Komentarz zamieszczony w nim wystarcza, żeby z grubsza zrozumieć postać wpisów.

Jeżeli chcesz mieć zdalne połączenie, to potrzebny jest rekord postaci

host twojabaza twojuser 10.1.3.3/24 md5

(adres/maska wpisana dla przykładu, a md5 jako metoda kontroli hasła).

Musisz też zadbać o przepuszczanie przez firewall pakietów przychodzących z tego adresu na port 5432.

 

Odnośnik do komentarza
Udostępnij na innych stronach

Ja bym jeszcze haslo dla usera postgres ustawil, bo u mnie na serwie debianowym przy pustym pgadmin nie chcial sie polaczyc.

Odnośnik do komentarza
Udostępnij na innych stronach

Ok plik /var/lib/pgsql/data/pg_hba.conf wygląda teraz tak:

 

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
#local   all         all                               ident sameuser
local   all     all                                     md5
# IPv4 local connections:
#host    all         all         127.0.0.1/32          ident sameuser
host    all     all             127.0.0.1/32            md5
# IPv6 local connections:
#host    all         all         ::1/128               ident sameuser
host    all     all             ::1/128                 md5

host    all kojo     127.0.0.1/32    md5

 

gdzie kojo to omój user systemowy na zależy mi tylko na połączeniu lokalnym do wszystkich baz postgresa przez PgAdmina3

Tak jak wspominał matlas przy próbie połączenia przez pgadmina3 na usera postgres (domyslnie nie ma on hasła ustawionego) dostaję komunikat:

Wystąpił błąd:

Error connecting to the server: fe_sendauth: no password supplied

Próbowałem zmienić hasło dla usera systemowego postgres ale w systtem-config-users ten user ma podana jakieś gwiazdki ale one są wyszarzone i nie do zmiany :blink: Dziwne bo ja do tej pory przez su - postgres logowałem się bez hasła.

Więc po kolei jest user systemowy postgres na którego wchodzę bez hasła by zalogować się do PostgreSQL i jest user w bazie danych postgres ?

Hasła tego systemowego nie mogę zmienić a dla tego bazodanowego wydłubałem coś takeigo

ALTER USER Postgres WITH PASSWORD '<newpassword>';

Czy o to chodzi?

Podaczas wydania

# psql -U postgres

pyta mnie jednak o hasło a gdy wydam

#su - postgres

to przechodzi do bash$ powłoki postgresa .. dlaczego?

Odnośnik do komentarza
Udostępnij na innych stronach

Tak, jest user postgres w systemie i jest w bazie.

 

psql -U postgres uruchamia konsolę Postgresa dla użytkownika BAZODANOWEGO postgres. Jeśli masz na localhost kontrolę dostępu md5, to żąda hasła. Możesz podać trust lub sameuser, ale nie zalecam w ogóle, a dla użytkownika postgres zwłaszcza.

 

su - postgres uruchamia powłokę systemową SYSTEMOWEGO użytkownika postgres. Z roota sesja su nie żąda hasła.

Nie mieszaj przy haśle w systemie, postgres nie powinien się nigdy logować. On jest właścicielem procesu serwera.

 

Natomiast hasło zmienione w psql lub innym kliencie dotyczy usera (czy szerzej: roli) bazodanowego. Komunikat ALTERUSER/ALTER ROLE świadczy o przyjęciu nowego hasła.

Odnośnik do komentarza
Udostępnij na innych stronach

psql -U postgres uruchamia konsolę Postgresa dla użytkownika BAZODANOWEGO postgres. Jeśli masz na localhost kontrolę dostępu md5, to żąda hasła. Możesz podać trust lub sameuser, ale nie zalecam w ogóle, a dla użytkownika postgres zwłaszcza.

Tak jak widzisz ustawiłem sobie md5 ale pyta mnie wtedy o hasło i było by ok gdybym ja znał to domyślne hasło.. bo sam niczego nie ustawiałem

 

su - postgres uruchamia powłokę systemową SYSTEMOWEGO użytkownika postgres. Z roota sesja su nie żąda hasła.

Nie mieszaj przy haśle w systemie, postgres nie powinien się nigdy logować. On jest właścicielem procesu serwera.

 

Natomiast hasło zmienione w psql lub innym kliencie dotyczy usera (czy szerzej: roli) bazodanowego. Komunikat ALTERUSER/ALTER ROLE świadczy o przyjęciu nowego hasła.

 

czyli co do bazy logować się powinienem nie przez

#su - postgres
$psql mydb

 

tylko

psql -U postgres

?

Dryga rzecz to: jeśli dodałem sobie swojego systemowego usera do pliku konfiga tak jak powyżej to jak mam zrobić by po psql -U kojo logował mi się do powłoki bazy dla tego usera przez hasło systemowe? czy też powinienem w takim wypadku stworzyć sobie dodatkowo usera kojo w bazie i nadać mu prawa?

Odnośnik do komentarza
Udostępnij na innych stronach

Tak jak widzisz ustawiłem sobie md5 ale pyta mnie wtedy o hasło i było by ok gdybym ja znał to domyślne hasło.. bo sam niczego nie ustawiałem

ustaw uwierzytelnianie lokalne na trust lub sameuser, wejdź, ustal hasło, wyjdź, przestaw uwierzytelnianie na md5.

czyli co do bazy logować się powinienem nie przez

#su - postgres
$psql mydb

tylko

psql -U postgres

Tak

Dryga rzecz to: jeśli dodałem sobie swojego systemowego usera do pliku konfiga tak jak powyżej to jak mam zrobić by po psql -U kojo logował mi się do powłoki bazy dla tego usera przez hasło systemowe? czy też powinienem w takim wypadku stworzyć sobie dodatkowo usera kojo w bazie i nadać mu prawa?

Se ne da. Postgres nie korzysta z systemowego shadow. Opcja sameuser (i ident) pozwala na logowanie użytkownika o tej samej nazwie co zalogowany użytkownik systemowy (w opcji ident przemapowany wg określonych reguł), bez podawania hasła.

 

Poczytaj w dokumentacji na postgresql.org

Odnośnik do komentarza
Udostępnij na innych stronach

ok wszystko poszło miodnie :)

 

Mam tylko pytanie chcę sobie zrobić skrót na pulpicie by uruchamiał mi serwer postgresa. Chciałem mu ustawić takie polecenie:

su - && /etc/init.d/postgresql start

ale niestety to polecenie nie działa tak jak chciałem tj aby pojawiło się okienko z pytaniem o hasło roota i aby w tle startował server postgresa.

Zastanawiam się jakby to można było zrobić.

Odnośnik do komentarza
Udostępnij na innych stronach

W konsoli, prymitywnie:

[Desktop Entry]
Encoding=UTF-8
Name=postgres service
Exec=su -c "/etc/init.d/postgresql start"
Terminal=true
Type=Application
Categories=Application;Database;System;

ale nie jest to najszczęśliwsze rozwiązanie. Lepiej napisać zgrabny skrypt od niezgrabnego aktywatora.

Graficznie: poczytaj o consolehelper. nie pomogę, bo tego nie umiem.

 

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
×
×
  • Dodaj nową pozycję...