torstaina, toukokuuta 24, 2012

Salasanan palauttaminen VLLaskussa

No kaikkea sitä voi yrittäjän arjessa sattuakin! Olin siirtämässä VLLaskujärjestelmääni läppäristä eilen asentamaani Ubuntun LAMP-ympäristöön. Läppäristä olevasta tietokannasta olin ottanut kopion ja tehnyt  VLLaskun config.php:n mukaiset kannat Ubuntuun. Kaikki sujui kuin tanssi, paitsi, että en päässytkään yllättäen kirjautumaan laskutusjärjestelmääni! Minähän pidän kaikki salasanani KeePassX-nimisessä lompakkoohjelmassa, ja siksi en enää ollenkaan muista ulkoa noita 20 merkkiä pitkiä turvallisia salasanojani. Luonnollisesti olin siis kopioinut KeePassX:n salasanakannankin Ubuntuun, joten salasanojen piti olla ihan ajantasalla kummassakin koneessa.

Jostain käsittämättömästä syystä VLLaskun salasana oli korruptoitunut/muuttunut (olinkohan sitten tallentanut jonkun muun salasanan vahingossa sen päälle?) KeePassX:ssä. Laskutusjärjestelmäni ei auennut myöskään läppärissä. PhpMyAdminista selvisi, että VLLasku kryptaa käyttäjien salasanat, mikä on tietenkin erittäin hyvä asia, paitsi silloin kun on hätä kyseessä ;-) Hetken aikaa raavin päätäni oikein tosissani, kunnes vihdoin keksin keinon, jota kokeilla. Näin jälkikäteen mietittynä asian olisi voinut tehdä varmasti vieläkin yksinkertaisemmin, joten kerron ensin, miten itse tein ja mikä pelasti tilanteen ja sitten vielä toisen nopeamman, mutta käyttännössä testaamattoman tavan tehdä tämä sama asia.

Tapa A eli pitkän kaavan mukaan:

VLLaskuohjelman mukana tulee skriptitiedosto nimeltään create_database.sql. Tällä tiedostolla luodaan ohjelmaa asennettaessa kantaan kaikki VLLaskun tarvitsemat taulut oletussisältöineen.

Loin ensin PhpMyAdminilla testitietokannan, johon toin kaikki 15 taulua ajamalla create_database.sql-tiedoston. Sitten otin  dumpin  (kopion) vain taulusta nimeltään vllasku_users. Sen jälkeen avasin ajantasaisesta laskutusjärjestelmästä ottamani varmuuskopion tekstimuokkaimeen (Gedit tai Texture) ja etsin tiedostosta kohdan:


-- Vedos taulusta `vllasku_users`
--

INSERT INTO `vllasku_users` (`id`, `deleted`, `name`, `email`, `login`, `passwd`, `type_id`) VALUES
(1, 0, 'Administrator', '', 'admin', 'tässä kohdassa on salasanarimpsu', 2);

--
Tästä lohkosta löysin admin-käyttäjätunnuksen ja sen perästä pitkän MD5 salauksella toteutetun salasanan. Avasin myös tuon vll_users -taulusta ottamani dumpin tekstimuokkaimeen ja etsin siitäkin saman kohdan ja kopioin siellä olevan pitkän kryptatun salasanan. Sitten siirsin sen laskutusjärjestelmän tietokantadumpin INSERT INTO `vllasku_users` -lohkoon paikalleen. Tallennus!

Tämän jälkeen palasin PhpMyAdminiin ja tuhosin sekä tuon äsken tekemäni testitietokannan että laskutusjärjestelmän kannan, jossa oli  se korruptoitunut salasana. Loin laskutusjärjestelmälle uuden tietokannan ja ajoin tuon äsken muokkaamani tietokantadumpin sinne.

Sitten onnekseni sain huokaista helpotuksesta, sillä pääsin sisään laskutusjärjestelmääni VLLaskun oletustunnuksilla admin admin.

Tapa B eli lyhyempi kaava:

Nyt näin jälkikäteen mietin, että oliko vllasku_users -taulusta ottamani dump vain turha välivaihe. Olisinko voinut kopioida laskutusjärjestelmän tietokantadumpiin suoraan create_database.sql -tiedostosta kohdan:

INSERT INTO vllasku_users (id, name, email, login, passwd, type_id) VALUES (1, 'Administrator', '', 'admin', md5('admin'), 2);

Niin, mitä tästä nyt sitten oppisi? Ainakin sen, että salasanoille voi lompakossakin käydä joskus ohraisesti, joten siitä salasanatietokannastakin kannattaa olla useita eri varmuuskopioita. Toisekseen opin nyt sen, että VLLaskussakin salasanan voi resetoida, mutta tällöinkin kannattaa olla varmuuskopion varmuuskopio tietokantadumpista, että ei vahingossa sössi juttua ihan lopullisesti. Loppu hyvin, kaikki hyvi ja jälleen voin taas laskuttaa ;-)

P.s. Keksin vielä yhden tavan, jolla oletussalasana tai mikä tahansa salasana voidaan laittaa tuohon tietokannanpalautusdumppiin. Nimittäin täällä  voit käydä tekemässä vaikkapa sanasta admin MD5 salatun  ja lisätä se sitten vain tuohon: Vedos taulusta `vllasku_users` -kohtaan ja ajaa sitten PhpMyAdminilla dumppi kantaan.

Ei kommentteja: