PostgreSQL - Instalacja i podstawowa konfiguracja

Transkrypt

PostgreSQL - Instalacja i podstawowa konfiguracja
PostgreSQL - Instalacja i podstawowa konfiguracja
1. Zdobywamy PostgreSQL'a
2. Kompilacja i instalacja.
2.1. Linux
3. Pierwsze uruchomienie
4. Podstawowa konfiguracja
4.1. Tworzenie nowej bazy danych
4.2. Konfigurowanie dostępu do bazy
4.3. Inne opcje
4.3.1. Opcje połączeń
4.3.2. Opcje wewnętrzne
4.3.3. Opcje logowania
1. Zdobywamy PostgreSQL'a
Notatka
Jako, że instalacja z rpm'ów, deb'ów oraz wszystkich innych rodzajów paczek jest
bardzo prosta nie będe jej tutaj opisywał. Opis takowej instalacji jest zazwyczaj
dostępny u wydawcy takowej paczki.
PostreSQL'a można zdobyć z różnych źródeł. W naszym przypadku potrzebne
będą źródła. Można je znaleźć na wielu CD dołączonych do różnych pism
komputerowych, ale najlepiej po prostu ściągnąć je z internetu. Strona domowa
projeku to http://www.postgresql.org/, tam też można pobrać najnowszą wersję
bazy ( w chwili pisania artykułu 7.4, natomiast rozwojowa CVS to 7.5 ).
Posługując się linkami wybieramy mirror w najkorzystniejszym dla nas miejscu (
są również i polskie ) i ściągamy bazę ( plik postgresql-x.x.x.*, jest to połączenie
plików postgresql-*-x.x.x.* ). Jeżeli korzystacie z dystrybucji dla której
przygotowane są już binarne paczki to polecam właśnie z nich skorzystać ze
względu na późniejszą wygodę przy updatowaniu. Jeżeli nie ma paczek dla
waszej dystrybujci musicie ściągnąć wersje źródłową ( .tar.gz, lub .tar.bz2 opcja mniejsza ).
2. Kompilacja i instalacja.
2.1. Linux
Ostrzeżenie
Osoby updatujące PostgreSQL'a powinny najpierw zrobić backup bazy. Do
zrobienia kopii bazy wykonujemy komendę pg_dumpall -U admin -d -D, gdzie
admin to nazwa administratora bazy ( zazwyczaj 'postgres' ). Nie zrobienie tego
grozi utratą danych podczas instalacji.
Jeżeli mamy już przygotowane archiwa możemy przystąpić do kompilacji i
instalacji. Instalacja wymaga najpierw sprecyzowania co chcemy mieć w bazię.
Wszystkie bowiem biblioteki oraz narzędzia muszą istnieć w systemie już przed
http://www.php.pl
Strona 1 z 7
instalacją PostgreSQL'a. Dużego wyboru dodatkowych opcji nie ma, ale mimo
wszystko mamy możliwość z takich dodatkowych rozszerzeń:
•
•
•
•
•
•
•
•
OpenSSL
Krb 4 oraz 5
PAM
Rendezvous
Java ( JDBC )
Perl
Python
Tcl/Tk
Pierwsze cztery dotyczą różnych sposobów autoryzacji, ostatnie trzy natomiast
są to dodatkowe języki jakie można doinstalować do naszej bazy. Java to
możliwość zbudowania sterowników do JDBC dla użycia w aplikacjach Javy. Gdy
już wiemy co chcemy mieć w bazie można przystąpić do kompilacji. Najpierw
trzeba rozpakować archiwa. Można to zrobić w jakimkolwiek katalogu, np. w
/tmp. W takim przypadku polecenie wyglądałoby tak ( zakładając, że archiwa
PostgreSQL są w aktualnym katalogu ): export TEMP_PGPATH=$PWD && cd
/tmp
&&
tar
-jxf
$TEMP_PGPATH/postgresql-x.x.x.tar.bz2
&&
unset
TEMP_PGPATH. Jeżeli ściągnęliście paczkę spakowaną jako tar.gz to możecie ją
rozpakować zamieniając argument -jxf na -zxf. Następnie wchodzimy do
katalogu który się utworzył ( /tmp/postgresql-x-x-x ). Teraz należy przygotować
Makefile do kompilacji. Zrobi to za nas skrypt configure. Przed jej uruchomieniem
należy dokładnie przeczytać wynik komendy ./configure --help. Potem już możemy
wydać komendę configure z właściwymi parametrami ( wcześniej mieliśmy
przemyśleć co chcemy mieć w bazie - teraz właśnie możemy z tego skorzystać ).
Należy jeszcze sprecyzować parametra --prefix, który jest odpowiedzialny za
miejsce instalacji bazy ( osobiście polecam --prefix=/usr/local, PostgreSQL sam
zadba o porządek a obsługa będzie dużo łatwiejsza, gdyż /usr/local/bin jest
częścią zmiennej $PATH ). Jeżeli poleceni zwróciło błąd powtarzamy je bez
argumentu, który wymagał skorzystania z jakiegoś rozszerzenia, którego brak
wypatrzył PostgreSQL lub po prostu doinstalowujemy bibliotekę.
Gdy już wszystko jest gotowe możemy przystąć do kompilacji. Przeprowadzamy
ją poleceniem make. Jeżeli wszystko pójdzie dobrze możemy albo zbudować
paczkę albo po prostu wydać polecenie make install && make install-all-headers.
Teraz możemy już udać się do następnej sekcji.
3. Pierwsze uruchomienie
Notatka
Baza nie może być uruchamiana z identyfikatorem użytkownika ani grupy równym
0 ( root ).
Notatka
Ścieżka dostępu do danych bazy musi być pustym katalogiem, natomiast
właściciel bazy danych musi mieć do niej wszystkie prawa.
http://www.php.pl
Strona 2 z 7
Podpowiedź
Żeby wszystkim artykuł czytało się łatwiej, polecam na wykonać taką komendę:
export PG_BINDIR=`/usr/local/bin/pg_config --bindir`, zastępując /usr/local/bin ścieżką
podaliśmy przy kompilacji w argumencie --prefix z przyrostkiem /bin.
Podpowiedź
Umówmy się, że ścieżka dostępu do katalogu w jakim chcemy umieścić dane
PostgreSQL'a zapisana jest w zmiennej $PG_DATA. W przykładach można ją albo
zmienić, albo po prostu wydać polecenie export PG_DATA=/sciezka/.
Zanim uruchomimy bazę musimy ją najpierw zainicjalizować. Do inicjalizacji
potrzebne będą następujące informacje:
•
•
Ścieżka do katalogu, w którym będziemy trzymali dane PostgreSQL'a.
Nazwę użytkownika, który będzie administratorem, właścicielem bazy a
same procesy bazy będą właśnie jego procesami.
Jeżeli już mamy te informacje przygotowane możemy przystąpić do
przygotowania naszej bazy do działania. Najpierw należy stworzyć wybrany
katalog, możemy to zrobić poleceniem mkdir $PG_DATA. Teraz możemy
zainicjować bazę. Aby tego dokonać należy zalogować się jako użytkownik
wybrany do bycia właścicielem bazy. Należy teraz wydać polecenie
$PG_BINDIR/initdb -D $PG_DATA. Jeżeli nie pokażą się żadne błędy, możemy
przejść dalej, jeżeli natomiast i owszem, są one wystarczająco czytelne, aby
sobie z nimi samemu poradzić. Nadszedł, więc odpowiedni moment na pierwsze
uruchomienie. Przedstawię tutaj bardzo prosty skrypt, który odpowiednio
wykorzystany może nas w tym zastąpić.
#!/bin/sh
export PG_DATA=/sciezka/do/bazy
case $1 in
start)
touch /var/log/pgsql # plik z logami
chmod 600 /var/log/pgsql
chown postgres /var/log/pgsql
su
postgres
-c
'/usr/local/bin/pg_ctl
-D
$PG_DATA
start
/var/log/pgsql 2>&1 &' # startujemy bazę jako postgres
echo 'Starting PostgreSQL deamon.' # i powiadamiamy się o tym ;)
;;
>
stop)
su postgres -c '/usr/local/bin/pg_ctl -D $PG_DATA stop' # zatrzymujemy
bazę
echo 'Stopping PostgreSQL deamon.' # i powiadamiamy się o tym
;;
status)
su postgres -c '/usr/local/bin/pg_ctl -D $PG_DATA status' # wywołujemy
status bazy
http://www.php.pl
Strona 3 z 7
;;
*)
echo "usage: `basename $0` {start|stop|status}" >&2 # informujemy o
złych parametrach
exit 64
;;
esac
Skrypt ten należy wyedytować (katalog oraz nazwa użytkownika) a potem
umieścić w katalogu startowym naszego linuksa. Niestety każda dystrybucja
używa do tego innego miejsca. Można z niego skorzystać również ręcznie. Aby
rozpocząć działanie bazy wystarczy wydać komendę ./skrypt.sh start, analogicznie,
do zatrzymania wystarczy ./skrypt.sh stop. Skrypt, jeżeli znajdziemy potrzebny
katalog oraz umieścimy go tam będzie startował naszą bazę przy każdym starcie
systemu i zatrzymywał ją przy jego wyłączeniu.
Ostrzeżenie
Bazy nigdy nie powinno się wyłączać poprzez polecenie kill -9, gdyż grozi to
błędami i utratą danych.
Można by już powiedzieć, że mamy w pełni działającą bazę danych.
Notatka
Aktualnie dysponujemy działającym serwerem bazy danych, do którego każdy
może się połączyć przez lokalne gniazdo jako administrator do dwóch
defaultowych baz - template0 oraz template1. Aby można było z niej korzystać
należy dokonać jeszcze paru zadań administracyjnych.
Nie jest ona jeszcze wprawdzie całkiem funkcjonalna, wystarczająco jednak, aby
przesunąć się do następnej sekcji.
4. Podstawowa konfiguracja
4.1. Tworzenie nowej bazy danych
Jeżeli nasz serwer już działa naprawdę powinniśmy utworzyć nową bazę danych,
gdyż nie powinno się pracować żadnej z defaultowych template0/1. Możemy to
zrobić na dwa sposoby, za pomocą oddzielnego narzędzia, oraz za pomocą
polecenia SQL. Opiszę tutaj tylko tą drugą metodę, gdyż jest ona bardziej
uniwersalna (można to zrobić również zdalnie). Najpierw musimy połączyć się z
serwerem. Do tego użyjemy narzędzie dostarczanego wraz z bazą, a mianowicie
psql. Najpierw musimy zalogować się jako użytkownik-właściciel bazy. Potem
musimy połączyć się z bazą danych. Jako, że PostgreSQL wymaga podania bazy
danych do jakiej chcemy się połączyć, a my takowej jeszcze nie posiadamy
połączymy się z bazą template1. Żeby tego dokonać musimy wykonać polecenie
psql -d template1. Jako, że domyślnym ustawieniem bazy jest wpuszczać
wszystkich z localhost, więc od razu wejdziemy do interfejsu programu bez
podawania hasła. Bazę danych stworzyć możemy komendą:
http://www.php.pl
Strona 4 z 7
CREATE DATABASE nazwa;
Jeżeli chcemy możemy podać więcej szczegółów na temat bazy, jak właściciel,
strona kodowa czy baza, z której tworzona ma dziedziczyć. Najlepiej jest
stworzyć bazę o imieniu użytkownika jakim najczęściej będziemy się łączyć z
bazą danych, gdyż wtedy nie będziemy musieli podawać jawnie nazwy bazy
danych przy połączeniach.
4.2. Konfigurowanie dostępu do bazy
Jeżeli już mamy działający serwer oraz stworzoną bazę danych to teraz przyszedł
właściwy moment na ustawienie odpowiednich reguł dostępu. Jest to zadanie
niezwykle ważne, ponieważ PostgreSQL ustawia domyślnie bardzo swawolne
reguły dostępu. Najpierw zaczniemy od ustawienie hasła administratorowi (
którego, żebyście się nie zdziwili, wcale nie znacie - spróbujcie się dostać do
psql'a z opcją -W ). Do robienia tego służy specjalne polecenie SQL ALTER
USER. Najpierw łączymy się jako postgres (administrator bazy danych) do psql'a
poleceniem psql -d nazwa, gdzie nazwa to nazwa bazy jaką stworzyliśmy w
poprzednim podpunkcie. Teraz musimy wykonać następujące zapytanie:
ALTER USER postgres
WITH PASSWORD 'new_password';
W powyższym zapytaniu postgres to nazwa użytkownika administratora, a
'new_password' to hasło jakie chcemy mu nadać, oba te elementy można
zmieniać. Teraz należałoby jeszcze dodać nowego użytkownika, bez uprawnień
administratora, aby praca była bezpieczniejsza. Wykonamy to za pomocą
następującego zapytania ( oczywiście musimy to zrobić jako administrator ):
CREATE USER nazwa
WITH PASSWORD 'password'
NOCREATEUSER
NOCREATEDB;
W powyższym zapytaniu nazwa to nazwa użytkownika do stworzenia, a
'password' to hasło jakie chcemy mu nadać. Teraz już możemy się łączyć do bazy
jako użytkownik, którego przed chwilą stworzyliśmy.
Ale co jest? Może mu się łączyć z baza danych nie podając hasła! Odpowiada za
to plik $PG_DATA/pg_hba.conf. Domyślnie wygląda on w ten sposób ( część
znacząca - czyli ostatnie pare linijek ):
# TYPE
DATABASE
USER
IP-ADDRESS
local
all
all
# IPv4-style local connections:
host
all
all
127.0.0.1
# IPv6-style local connections:
host
all
ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
http://www.php.pl
IP-MASK
METHOD
trust
255.255.255.255
all
trust
trust
::1
Strona 5 z 7
Jest to główna część odpowiadająca za dostęp do bazy. Jak widać wszystko
składa się z 6 kolumn (bądź 4, jeżeli definiujemy prawa na połączeniach
lokalnych). Wszystkie kolumny są oddzielone od siebie białymi znakami ( spacja
lub znak tabulacji ). Pierwsza kolumna oznacza, jaki rodzaj połączeń definiujemy.
Jeżeli ma wartość local, oznacza to, że definiujemy połączenie lokalne przez
UNIKsowe gniazda, jeżeli natomiast ma wartość host, oznacza to, że definiujemy
połączenie przez protokół tcp/ip. Jest jeszcze jedna możliwość ( dla bardziej
zaawansowanych zastosowań ), a mianowicie hostssl, która oznacza, że
połączenia z tego hosta muszą być kodowane. Druga i trzecia kolumna oznaczają
odpowiednio nazwę bazy danych oraz użytkownika, dla którego definiujemy
połączenie. Czwarta i piąta kolumna ( ważne tylko jeżeli definiujemy połączenie
typu host lub hostssl ) oznaczają adres IP oraz maskę z jakich połączenia mają
przychodzić połączenia. Ostatnia kolumna ( najważniejsza ) mówi w jaki sposób
użytkownik ma być autoryzowany. Główne i najczęściej używane opcje to trust,
password oraz md5. Pierwsza oznacza, że wogóle nie trzeba podawać hasła,
druga mówi o konieczności podania hasła w postaci text/plain a trzecie, że
powinno ono być zakodowane przez md5. W sumie dobrym rozwiązaniem jest
ustawienie tego pliku w taki sposób:
# TYPE
DATABASE
USER
IP-ADDRESS
IP-MASK
local
all
password
# IPv4-style local connections:
host
all
all
127.0.0.1
password
# IPv6-style local connections:
host
all
all
ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
password
METHOD
all
255.255.255.255
::1
Musimy
jeszcze zrestartować bazę, wykonamy to poleceniem pg_ctl -D
$PG_DATA restart, gdzie oczywiście musimy zmienić ścieżkę dostępu na tą, którą
podaliśmy w naszym systemie. Teraz już możemy się zalogować do bazy jako
ktokolwiek. Powinniśmy zobaczyć ładną zachętę do wpisania hasła.
4.3. Inne opcje
Głównym plikiem konfiguracyjnym bazy jest plik $PG_DATA/postgresql.conf. Są
tam przechowywane praktycznie wszystkie dane temat zachowania naszej bazy.
Bardzo dobry opis dostępnych tutaj opcji znajduje się na stronie
http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html. Nie będę tutaj
tworzył aż tak dokładnego opisu, gdyż nie na tym istota tego artykułu polega, dla
osób stawiających jednak komercyjny serwer polecam przyjrzeć się tamtej
stronie.
http://www.php.pl
Strona 6 z 7
4.3.1. Opcje połączeń
Opcje tutaj opisane służą do regulowania możliwości/parametrów połączenia się z
bazą. Jest tutaj stosunkowo niewiele, aczkolwiek stosunkowo ważnych opcji.
•
tcpip_socket
Opcja może mieć wartość true albo false. Mówi, czy powinna być
możliwość dostępu do bazy z sieci ( według reguł zdefinowanych w sekcji
4.2 ), czy też nie. Jeżeli możliwe są tylko połączenia przez sockety lokalne.
•
max_connections
Opcja okresla maksymalną liczbę połączeń jakie mogą być nawiązane z
bazą w jednym czasie.
•
superuser_reserver_connections
Opcja
określa,
ile
połączeń
powinno
pozostać
wolnych
dla
superużytkoniwka ( administratora ). Oznacza ona, że połączeń dla
zwykłych użytkowników jest liczba zdefiniowana powyżej minus liczba
połączeń zarezerwowanych dla superużytkownika. W praktyce przy
większości wystarcza jedno.
•
port
Oznacza na jakim porcie ma nasłuchiwać baza. Jeżeli tcpip_socket jest
ustawiony na false to opcja jest ignorowana.
•
authentication_timeout
Określa liczbę sekund ( 1 - 600 ), jaka może maksymalnie upłynąć gdy
baza oczekuje na autoryzacje nowo nawiązanego połączenia.
Są to najważniejsze opcje w tej dziedzinie. Wraz z dobrym ustawieniem
opcji omawianych w sekcji 4.2 oraz dobrym ustawieniem uprawnień w
samej bazie ( nie omawiane w tym artykule ) można osiągnąć naprawdę
wysoki poziom bezpieczeństwa.
4.3.2. Opcje wewnętrzne
4.3.3. Opcje logowania
http://www.php.pl
Strona 7 z 7

Podobne dokumenty