A következő címkéjű bejegyzések mutatása: adatbázis. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: adatbázis. Összes bejegyzés megjelenítése

2009. febr. 14.

Címjegyzék visszaállítása a Roundcube Webmail-ben manuálisan

Az előző Roundcube-ról szóló postomban leírtam, hogyan tudjuk frissíteni a webmail-ünket. Sajnos egy csomó hiba generálódott, nem volt jó a karakterkódolás stb., ezért ma teljesen újratettem az egész kócerájt. Természetesen mindenről készítettem biztonsági mentést.

Jelen írás feltételezi, hogy rendelkezünk a régi adatbázisunkról biztonsági mentéssel!

A régi adatbázist elküldtem melegebb éghajlatra, és egy teljesen üreset hoztam létre. Ez természetesen azzal járt, hogy a benne levő címjegyzékek, felhasználók törlődtek. Tudom, hogy ennek sokan nem fognak örülni, de csak egy e-mail, és máris visszakerül minden szükséges, és pótolhatatlan adatuk.

Hogyan?

Egyszerűen. Tegyük fel, hogy megkaptuk Kala Pál nevű felhasználónktól a reklamációt, hogy márpedig nagyon gyorsan állítsuk helyre neki a címjegyzékét. A következőekben részletesen leírom, hogy miket kell végrehajtani, de előtte néhány megjegyzés a követhetőségért.

A roundcube_db a Roundcube-hoz tartozó aktuális adatbázisom neve, a roundcube_db_backup pedig a régi adatbázis, ezért ezeket tessék a saját konfigurációnknak megfelelőre cserélni. Az előforduló neveket, e-mail címeket szintén tessék cserélgetni értelem szerűen.


mysql -p

mysql>
USE roundcube_db_backup;
mysql> SELECT * FROM users WHERE username = "kala.pal";

Ezek után egy ehhez hasonló kimenetet kapunk:

+---------+-----------+-----------------+-------+---------------------+---------------------+----------+--------------- ---------------------------+

| user_id | username | mail_host | alias | created | last_login | language | preferences |
+---------+-----------+-----------------+-------+---------------------+---------------------+----------+--------------- ---------------------------+
| 641 | kala.pal | imap.sch.bme.hu | | 2008-10-29 19:06:13 | 2009-02-12 10:54:23 | hu_HU | a:2:{s:16:"mes e_sort_order";s:4:"DESC";} |
+---------+-----------+-----------------+-------+---------------------+---------------------+----------+--------------- ---------------------------+
1 row in set (0.00 sec)


Ebből nekünk a felhasználó azonosítójára van szükségünk, amit a user_id oszlop tartalmaz. Esetünkben ez a 641.

mysql> SELECT * FROM contacts WHERE user_id = "641";

+------------+---------------------+-----+------------+-----------------------+-----------+---------+-------+---------+
| contact_id | changed | del | name | email | firstname | surname | vcard | user_id |
+------------+---------------------+-----+------------+-----------------------+-----------+---------+-------+---------+
| 345 | 2009-02-14 13:48:52 | 0 | Gép Elek | gep.elek@email.cim.hu | | | NULL |
641 |
| 543 | 2009-02-14 13:48:55 | 0 | Halász Gabriella | gaboo.mano@sehol.se | | | NULL |
641 |
| 578 | 2008-11-08 21:33:23 | 0 | [kszk] | kszk@mail.cim.hu | | | NULL |
641 |
+------------+---------------------+-----+------------+-----------------------+-----------+---------+-------+---------+
3 rows in set (0.00 sec)


Ezeket a sorokat kell majd a roundcube_db contacts táblájába bele tenni, de előtte még szükségünk van Kala Pál azonosítóira az aktuális adatbázisunkban.

mysql> USE roundcube_db;
mysql> SELECT * FROM users WHERE username = "kala.pal";

mysql> SELECT * FROM contacts;

Az utolsó parancs kiadása után nézzük meg, hogy mi a legutolsó contact_id, mert nekünk eggyel nagyobb értéket kell megadnunk az új adatok megadásánál. Az utolsó oszlopban kala.pal user_id-ját kell megadni, ami esetünkben most 2.

mysql> INSERT INTO contacts (contact_id, changed, del, name, email, firstname, surname, vcard, user_id) VALUES(3,"2008-11-08 21:33:23",0,"[kszk]","kszk@mail.cim.hu","","",NULL,2);

Ezt minden egyes sorral elvégezve felhasználónk már használhatja is újra a címjegyzékét.

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: