2008. nov. 15.

PostgreSQL adatbázis létrehozása és a hozzátartozó jogosultságok beállítása

A héten érkezett egy mail, amiben nem csak a szokásos MySQL adatbázist kérte a felhasználó, hanem PostgreSQL-t is. Most először fordult elő ilyen kérés, amióta a dbadmin (is) én vagyok. Természetesen semmit nem tudtam arról, hogyan működik ez a "postgreizé".
A MySQL adatbázisok létrehozása egyszerű: elindítom a konzolt, kiadok néhány SQL parancsot, aztán már megy is az e-mail az eléréshez szükséges adatokkal. A PostgreSQL még ennél is egyszerűbbnek tűnt, hiszen itt a következőket kell csak tenni:

createuser -P -E

Ezután meg kell adni a felhasználó nevét, majd 3 kérdésre kell helyesen válaszolnunk :)

Shall the new role be a superuser? (y/n) (A helyes válasz az "n")
Shall the new role be allowed to create databases? (y/n) (A helyes válasz az "n")
Shall the new role be allowed to create more new roles? (y/n) (A helyes válasz az "n")

Természetesen mindezt akár kapcsolókkal is megadhatjuk:

createuser -P -E -S -D -R

Ezután létrehozzuk az adatbázist:

createdb -O felhasznalo -E utf8 adatbazis

A -O kapcsolóval megadjuk az adatbázis tulajdonosát, az -E kapcsolóval pedig szerintem mindenki rájön mit tudunk közölni a rendszerrel :)
Ezek után elvileg készen vagyunk, vagyis úgy gondoltam, hogy így van. Tévedtem.
A PostgreSQL rendszer jogosultság kezelése eltérő a már számomra "ismert" MySQL-től. Miután létrehoztam a felhasználót, és még magamnak is kreáltam egyet, majd egy adatbázist, amelynek a tulajdonosának a felhasználót adtam meg, meglepődve tapasztaltam, hogy én is hozzáférek az adatbázishoz. Sőt, nem csak hozzáférek, de új táblát is létre tudok benne hozni. Ugyan a már létezőket nem tudom módosítani, sem olvasni, de minden jogom megvan ahhoz, hogy jól telerakjam mindenféle crap-pel. Ez így nagyon nem jó!
A megoldásra először Cassus vezetett rá, aztán pedig Roadkill erősített meg a dologban. A PostgreSQL konfigurációs fájljai között van egy pg-hba.conf nevű. (Nekem a Debian rendszeremen a /etc/postgresql/8.1/main könyvtárba található) Ebben a fájlban lehet megadni, hogy melyik felhasználó honnan, és melyik adatbázishoz férjen hozzá. A következő sort kell beszúrni a többi közé:

local adatbazis felhasznalo md5

Ezután újra kell indítani az adatbázis rendszert, hogy az új szabályok érvénybe léphessenek:

/etc/init.d/postgresql-8.1 restart

Ha ezek után megpróbálunk egy olyan adatbázishoz hozzáférni, amihez nincs jogosultságunk, akkor a következő hibaüzenetet kapjuk:

psql: FATAL: no pg_hba.conf entry for host "[local]", user "reedcourty", database "adatbazis", SSL off

Ha valakinek kedve szottyanna egy kicsit megismerkedni a PostgreSQL-lel, akkor látogassa meg a http://www.postgresql.org oldalt, vagy pedig egyszerűen csak essen neki a http://www.postgresql.org/docs/8.1/interactive/index.html címen található dokumentációnak.

Források: