SQL un PL/SQL injekcijas

Oktobris 29, 2008

Moto:
‘Why, what can be worse than cutting our throats?’ she asked, with pretty, naive surprise.
‘Cutting our purses,’ he answered. ‘Man is so made these days that his capacity for living is determined by the money he possesses.’

- Kā, kas tad var būt vēl ļaunāk kā laupīt mums dzīvību? – viņa jautāja diezgan naivā pārsteigumā.
- Nolaupīt mūsu makus, – viņš atbildēja. – Mūsu dienās cilvēks ir izveidojies tā, ka viņa spēju dzīvot nosaka nauda, kas viņam pieder.

The Sea-Wolf, Jack London.

Neba nu tā, ka es šim citātam pilnīgi piekristu, vēl jo vairāk tāpēc, ka Vilks Larsens ar savu filozofiju diezgan slikti beidza (starp citu saistošs stāsts, iesaku izlasīt). Taču savi maki (dati) ir jāaizsargā, jo citādi kāds tos atnāks un paņems tādā vai citādā veidā. Viens no veidiem, kā makus atstāt vaļā, ir atstāt caurumu, lai Jūsu aplikācijās varētu veikt SQL injekcijas.

Šis raksts galvenokārt ir domāts programmētājiem, kas raksta kodu, nevis lauzējiem, kas cenšas to uzlauzt. Šajā rakstā esošos piemērus bez īpašas piepūles var atrast simtiem vietās internetā, tāpēc nevajadzētu uzskatīt šo par iedrošinājumu “sliktajiem“, bet par aicinājumu “labajiem” neatstāt durvis puspievērtas, ja mājā iekšā vērtīgas lietas.

Visi turpmākie piemēri būs balstīti tikai uz Oracle SQL un PL/SQL. Tai pašā laikā šai rakstā demonstrētās tehnikas nebūt nav ierobežotas tikai ar šo konkrēto SQL implementāciju un programmēšanas valodu.

Kas tas ir?

SQL injekcijas rezultātā datubāzē tiek izpildīts pavisam cits SQL teikums, nevis tas, kas sākotnēji domāts. Tas var būt gan datu atlases (SELECT) gadījumā, gan arī, piemēram, datu koriģēšanas (UPDATE) gadījumā. Parasti “cits” nozīmē vai nu sensitīvu datu iegūšanu (SELECT gadījumā), vai nesankcionētu datu koriģēšanu, vai arī nesankcionētu tiesību piekļuves iegūšanu.

Kad tas notiek?

Parastākais un izplatītākais gadījums ir tad, kad programmētājs neuzmanīgi veido SQL vaicājumu un konkatenē to kopā kā tekstu. Līdz ar to potenciāli ir apdraudēts jebkurš koda gabals jebkurā programmēšanas valodā, kurā programmētājs “lipina” kopā SQL teikumus kā teksta virknes.

SQL injekcija Select vaicājumā nesankcionētai datu ieguvei

Visiem turpmākajiem piemēriem mēs lietosim šādas 2 tabulas,  kas simbolizēs visiem pieejamo informāciju un slepeno informāciju.

CREATE TABLE publiska (
  id NUMBER,
  dati VARCHAR2(100));
CREATE TABLE slepena (
  id NUMBER,
  dati VARCHAR2(100));
INSERT INTO publiska VALUES (1, 'publiska info');
INSERT INTO slepena VALUES (1, 'slepena info');
commit;

Refkursori ir ērts un parocīgs veids, kā no Oracle atdot datus izsaucošajai videi. Lai tā būtu .NET, PHP vai jebkas cits. Protams, ja to dara nekorekti, tad var iedzīvoties pamatīgās nepatikšanās. Skatamies piemēru, ko var pilnībā izpildīt no SQL*Plusa, bet tikpat labi izsaukums var tikt veikts no jebkuras citas vides.

Piemērs 1. Ievainojamas SQL funkcijas izveides piemērs.
CREATE OR REPLACE FUNCTION f_slikta (
  in_filtrs IN VARCHAR2)
RETURN sys_refcursor IS
  rcur sys_refcursor;
BEGIN
  OPEN rcur FOR 'SELECT *
                 FROM publiska
                 WHERE dati LIKE ''' || in_filtrs || '''';
  RETURN rcur;
END;
/
Piemērs 2. Ievainojamās SQL funkcijas sākotnēji paredzētais izsaukums.
SQL> variable cv refcursor
SQL> exec :cv := f_slikta('pub%')
PL/SQL procedure successfully completed.
SQL> print cv
        ID DATI
---------- ---------------
         1 publiska info

Viss kārtībā, vai ne? Dabūjām apmēram to, ko vēlējāmies? Taču paskatamies, kas notiek ar speciālu virkni.

Piemērs 3. Ievainojamās SQL funkcijas izsaukums izmantojot speciālu virkni – SQL injekcija.
SQL> exec :cv := f_slikta(''' UNION ALL SELECT * FROM slepena -- ')
PL/SQL procedure successfully completed.
SQL> print cv
        ID DATI
---------- -------------
         1 slepena info

Slepenā info vairs nav nekāds noslēpums! Kā tad tas notika? Tātad ir vairākas lietas, kas nepieciešamas:

  • tiekam vaļā no iepriekšējā vaicājuma rezultāta vienkārši LIKE salīdzināšanas mainīgā vietā padodot 3 apostrofus, kas SQL teikumā pārvērtīsies par vienu un gala rezultātā iegūstam šādu salīdzināšanu LIKE ” . Protams šis solis nebūt nav obligāts, galu galā jau publiskā info mūs arī briesmīgi netraucēja.
  • Izmantojot kopas operatoru UNION ALL lasam datus no slepenās tabulas.
  • Beigās izmantojam vienrindas komentāru, lai aizkomentētu pēdējo fiksēto apostrofu, kas ir ielikts funkcijas refcursora veidošanas izteiksmē.

Ja vēl joprojām nav skaidrs kā tas īsti notika, tad varam modificēt funkciju un izdrukāt (piemēram, izmantotojot dbms_output.put_line) ārā SQL teikumu. Tad mēs iegūtu šādu izpildīto SQL teikumu:

SELECT * FROM publiska
WHERE dati LIKE '' UNION ALL SELECT * FROM slepena -- '

Select vaicājums bez injekcijas iespējas 

Redzam, ka ir slikti, ko darīt, lai būtu labāk? Atceramies, ka visa ļaunuma sakne slēpjas apstāklī, ka mums tika konkatenētas kopā teksta virknes, kur viena bija lietotāja iedotā. No tā var izvairīties lietojot bind mainīgos. Šajā gadījumā mainīgais tik tiešām būs tikai mainīgais, nevis kaut kāda teksta virkne, kuru lietotājs var uzdot kā vien vēlas un kas maina SQL teikuma jēgu un sākotnējo mērķi. Tātad veidojam labo funkciju.

Piemērs 4. NEIevainojamas SQL funkcijas izveides piemērs.
CREATE OR REPLACE FUNCTION f_laba (
  in_filtrs IN VARCHAR2)
RETURN sys_refcursor IS
  rcur sys_refcursor;
BEGIN
  OPEN rcur FOR 'SELECT *
                 FROM publiska
                 WHERE dati LIKE :x ' USING in_filtrs;
  RETURN rcur;
END;
/ 

Skatamies, kas notiks ar iepriekšējiem izsaukumiem.

Piemērs 5. NEIevainojamās SQL funkcijas sākotnēji paredzētais izsaukums.
SQL> variable cv refcursor
SQL> exec :cv := f_laba('pub%')
PL/SQL procedure successfully completed.
SQL> print cv
        ID DATI
---------- ---------------
         1 publiska info

Kā redzams nekas vismaz šoreiz rezultātā nav mainījies.

Piemērs 6. NEIevainojamās SQL funkcijas izsaukums izmantojot speciālu virkni – SQL injekcijas mēģinājums.
SQL> exec :cv := f_laba(''' UNION ALL SELECT * FROM slepena -- ')
PL/SQL procedure successfully completed.
SQL> print cv
no rows selected

Nu re – nekas netika atrasts, kā jau sākumā bija cerēts. Pie tam šim variantam arī no ātradarbības viedokļa ir papildus bonusi – nelietojot bind mainīgos shared pool (atmiņas apgabals, kur tiek glabāti izpildītie SQL teikumi un to izpildes plāni) tiek pārpludināts ar ļoti līdzīgiem SQL teikumiem, kas atšķiras tikai par konstantes tiesu (t.i. katram mainīgajam savs SQL teikums). Ja lieto bind mainīgos, tad šādu problēmu nav.

Tātad redzam, ka pirmajā gadījumā tika atgriezts vēlamais rezultāts un arī otrajā gadījuma tika atgriezts vēlamais rezultāts, jo tikai un vienīgi tabulā publiska tika meklēta kaut kāda simbolu virkne, kura bija pagadījusies tāda diezgan speciāla un to nevarēja atrast.

SQL injekcija Select vaicājumā nesankcionētai jebkādai darbībai

Ja nu gadījumā Jūs iepriekšējais piemērs pilnībā nepārliecināja – sak mēs godīgi cilvēki, mums nav ko slēpt – tad paskatamies uz nākošo piemēru. Šeit lietotājs Zaglis jau ir iekļuvis sistēmā un viņam ir izveidots lietotāja konts. Atceramies, ka reālajā dzīvē tas var būt kāds no esošajiem noklusētajiem lietotājiem (scott, hr utt), kuram administrators nav nomainījis noklusēto paroli, vai arī parole ir bijusi pietiekami vienkārša un zaglis to ir uzminējis.

Piemērs 7. Zagļa mēģinājums nesankcionēti koriģēt datus.
SQL> create user zaglis identified by zaglis;
User created.
SQL> grant create procedure to zaglis;
Grant succeeded.
SQL> grant create session to zaglis;
Grant succeeded.
SQL> conn zaglis/zaglis
Connected.
SQL> INSERT INTO gints.slepena VALUES (2, 'ŠEIT BIJA ZAGLIS');
INSERT INTO gints.slepena VALUES (2, 'ŠEIT BIJA ZAGLIS')
                  *
ERROR at line 1:
ORA-00942: table or view does not exist

Tātad redzam, ka zaglis ir iekļuvis sistēmā un mēģina pievienot savu “parakstu”, bet viņam tas neizdodas, jo tiesību mehānisms to neļauj. Bet zaglis ir pietiekami gudrs, lai izveidotu savu speciālo funkciju (Savā shēmā!!!), kas viņam šīs tiesības iedos, un iedotu tiesības to izpildīt uzbrukuma mērķim.

Piemērs 8. SQL injekcijas funkcijas izveide un izpilde, kas dod nesankcionētas tiesības.
create or replace function dot_tiesibas return number
authid current_user is
  pragma autonomous_transaction;
begin
  execute immediate 'grant all on slepena to zaglis';
  return 1;
end;
/
SQL> grant execute on dot_tiesibas to gints;
Grant succeeded.
SQL> conn gints/gints
Connected.
SQL> exec :cv := f_slikta(-
> ''' UNION ALL SELECT zaglis.dot_tiesibas, null FROM dual --')
PL/SQL procedure successfully completed.
SQL> print cv
        ID DATI
---------- ------
         1
SQL> conn zaglis/zaglis
Connected.
SQL> INSERT INTO gints.slepena VALUES (2, 'ŠEIT BIJA ZAGLIS');
1 row created.
SQL> commit;
Commit complete.

Redzam, ka zaglis tagad no sava konta var bez problēmām darīt visu ar tabulu slepena. Kā tad tas īsti notika?

Tātad Zaglim savā kontā ir tiesības izveidot procedūras un funkcijas. Zaglis izveido funkciju dot_tiesibas, kurai ir šādas īpašības:

  • Tā ir lietotāja definēta funkcija un tādas ir iespējams izsaukt Select vaicājumos;
  • Zaglis ir iedevis tiesības lietotājam gints šo funkciju izpildīt, tāpēc lietotājs gints to var izdarīt (pats nemaz to neapzinādamies);
  • Select vaicājumā izpildāmās funkcijas nedrīkst veikt izmaiņas datubāzē un/vai ar datubāzes objektiem, ja vien šī funkcija nav izsaukta atsevišķas transakcijas ietvaros – ko arī norāda atslēgas vārdi pragma autonomous_transaction;
  • Šī funkcija speciāli ir veidota ar atslēgas vārdiem authid current_user, kas nozīmē to, ka funkcija tiks izpildīta tekošā lietotāja shēmā, nevis kā noklusēti – tā lietotāja shēmā, kas šo funkciju ir izveidojis;
  • execute immediate ļauj izpildīt dinamisko SQLu, tai skaitā arī DDL un DCL.

Nākošaja solī Zaglis izpilda ievainojamo funkciju f_slikta ar šoreiz mazliet citādu SQL injekciju, kas lietotāja gints shēmā izsauc zagļa izveidoto funkciju, kas atgriež 1, bet daudz svarīgāk – piešķir visas tiesības uz tabulu slepena lietotājam Zaglis. Tādējādi Zaglis ir nonācis pie sava vēlamā rezultāta.

Līdzīgu mehānismu var izmantot arī citos datu manipulēšanas teikumos (INSERT, UPDATE, DELETE), ja tie tiek konkatenēti kopā kā teksta virknes, nevis tajos tiek korekti izmantoti mainīgie.

Tātad stāsta morāle ir šāda – nevainosim zagli, ja paši rakstam sliktu kodu. Zagļi vienmēr ir bijuši un būs, bet tikai mūsu izvēle ir rakstīt kodu, kuru zagļi var viegli izmantot saviem mērķiem, vai arī rakstīt kodu, kuru šādi izmantot nevar.

Tālākā lasāmviela

SQL injekcijas un cita drošības informācija Oracle datubāzē:

Informācija par SQL injekcijām (ne tikai Oracle) latviski:


Oracle diena 2008 pagājusi

Oktobris 17, 2008

Šī gada Oracle diena ir noslēgusies. Tajā bija nepieredzēta cilvēku atsaucība – uz pasākumu esot piereģistrējušies ~450 cilvēku. Protams, ka reāli ieradās mazāk, kā to varēja redzēt no pāri palikušām kartiņām, bet to nemaz tik daudz nebija un vienalga cilvēku daudzums bija gana iespaidīgs. Pasākumu atklāja Guntis Kalniņš, Oracle filiāles Latvijā vadītājs. Viņa runā (un arī dažu nākošo prezentētāju – Oracle pārstāvju runās) vēlreiz tika atzīmēts fakts, ka Oracle vairs nepavisam nav tikai pazīstama ar savu datubāzi, bet ir pirmajā vietā pasaulē ~40 dažādās produktu grupās. Un kopējais dažādo produktu skaits tuvojas 3000.

Tālāk īsu uzrunu teica Signe Bāliņa, īpašu uzdevumu ministre elektroniskās pārvaldes lietās, Arvils Freipičs, Affecto Latvija (kas bija arī pasākuma galvenais sponsors) valdes priekšsēdētājs un pārītis uzaicinātie runātāji angliski. Vēl noklausījos Jura Trošina prezentētās “Oracle DB 11g jaunās iespējas”, kā arī otru viņa performanci “Oracle auditēšana – uzticies, bet pārbaudi!” un prezentāciju par “Lattelecom pieredzi Oracle BPEL izmantošanā”, ko stāstīja Edgars Ruņģis un Andis Cirsis. Visas tās bija gana interesantas.

Pēdējā pieciniekā bija arī mana prezentācija par analītiskajām funkcijām un SQL model klauzu. Izrādījās, ka manas sajūtas par to, ka tikai nedaudz cilvēku ir tās lietojuši, īsti neatbilda īstenībai, jo apmēram divas trešdaļas no ~30 klausītājiem pacēla rokas atbildot uz manu jautājumu, kurš tās ir lietojis iepriekš. Savukārt otrs mans paredzējums (ka par SQL model klauzu nezin gandrīz neviens) trāpīja desmitniekā, jo tikai viens klausītājs atzinās, ka ir iepriekš ar to darbojies.

Tagad tas, ko apsolīju prezentācijas klausītājiem – pati prezentācija lejuplādēšanai. Papildus kā bonusu :) dodu arī skripta failiņu, kurā ir piemēri, kas ilustrēti prezentācijā. Pašās beigās ir pilnīgi funkcionējošs kredīta kalkulators (gan ar vienmērīgo, gan dilstošo maksājumu), kas uzrakstīts ar SQL model klauzu (prezentācijā bija tāda saīsināta versija). Kredīta kalkulators, protams ir atrodams gandrīz jebkurā bankas mājaslapā, piemēram SEB bankai tas ir šeit. Varat patestēt kā strādā SEB bankas un kā tas, kas rakstīts ar SQL Model klauzu. Starp citu bankas mājaslapā vienmērīgā maksājuma gadījumā pēdējā mēneša maksājumus aprēķina nepareizi ;)  izskatās pēc noapaļošanas kļūdas.

Skriptā analītisko funkciju daļai vajadzētu strādāt no 8.1.7.x versijas un model klauzai no versijas 10.1.x.x.

Tad vēl resursi, kurus ir vērtīgi izmantot par šīm tēmām:

Pēdējie divi ir blogi, kuros var atrast vērtīgu info par SQL Model klauzu, tur ir vairāki ieraksti par šo tēmu.

Tātad solītais:

Apmaiņā pret failu lejuplādi neaizmirstiet arī nobalsot, kādu DBVS izmantojat! ;)

P.S. Affecto Latvia prezentācijas ir šeit un TietoEnator Alise prezentācijas ir šeit.


Kādu DBVS Jūs lietojat?

Oktobris 16, 2008

WordPress ir pievienojis kārtējo jauno lietu – ir iespējams ātri un viegli pievienot aptaujas. Nolēmu, ka šis varētu būt jauks veids kā noskaidrot, kādas DBVS Jūs lietojāt pēdējā gada laikā. Ar lietošanu es saprotu to, ka Jūs vairāk vai mazāk ikdienā konkrēto DBVS izmantojat, ja esat students/skolnieks – tad rakstat mājasdarbus, ja lietotājs – tad lietojat, ja programmetājs - tad programmējat. Protams, ka atbildes var būt vairākas.

Manuprāt potenciāli populārākie varianti ir rakstīti atsevišķi. Lūdzu nehakojiet aptauju un nebalsojiet vairākas reizes par savu mīļoto Datubāzi :) Pašlaik domāju, ka varētu to turēt redzamu vai nu kā piesprausto (sticky) ierakstu, vai sānu malā (ja tā izdosies pielikt) kādas divas nedēļas teiksim līdz šā gada 31. oktobrim ieskaitot. Katrā ziņā pēc tam būs interesanti paskatīties, kas tad mūsu smilšukastē ir tas populārākais un apsolu beigās publicēt rezultātus. Tā kā uz priekšu un paldies par atbildi jau iepriekš!

Aptauja beigusies. Rezultāti par populārākajām datubāzu vadības sistēmām redzami šeit.


Datu bāzes sakaru pasaulē turpinājums

Oktobris 14, 2008

Pirms kāda laika es informēju, ka žurnālā Sakaru pasaule ir mans raksts par datubāzēm. Tagad šis raksts ir pieejams arī elektroniski jebkuram interesentam un tā arī saucās Datubāzes. Galvenais uzsvars tajā uz dažām lietām:

  • kā izvēlēties datu bāzes vadības sistēmu, kādi ir tās izvēles kritēriji;
  • ko nozīmē vārds “labāks” katrā konkrētā gadījumā;
  • Oracle DBVS, Microsoft SQL Server un IBM DB2 galveno iespēju uzskaitījums.

Kaut kādā mērā daļēji vismaz pirmie divi punkti pārklājas ar šajā vietnē esošo rakstu “Kā izvēlēties datubāzi“.

Atgādinu arīdzan vēl, ka dzīve iet uz priekšu un rakstā minētā potenciālā SQL Server 2008 versija ir jau iznākusi.


Datubāzēm gads apkārt

Oktobris 10, 2008

Ir pagājis apaļš gads kopš attapos, ka Latvijā par datubāzēm nekā īpaša nav, nolēmu kaut ko lietas labā darīt un publicēju savu pirmo rakstu. Tā kā gads ir pietiekami labs atskaites punkts, tad mēģināšu mazliet parādīt, cik man kas ir garš ;) , rezumēt, kas no sākotnēji cerētā izdevās, kas nē, un mazliet paskatīties nākotnē.

Daži statistikas dati

Šī gada laikā ir tapuši 52 raksti (visu sarakstu var redzēt šeit, tātad vidēji gandrīz viens nedēļā), 7 lapas un 124 komentāri. Gada laikā saskaņā ar wordpress statistiku (kas nāk no google analytics) kādu lapu no šīs vietnes ir pieprasījuši (hits) 24180 reizes. Trīs visvairāk lasītie raksti ir bijuši:

savukārt visvairāk lasītā lapa SQL pieprasījumu (vaicājumu) pamati (1679 reizes), kas kā pirmā 1000 robežu sasniedza jau šī gada 9. jūnijā.
Lapas, kas vienā dienā sakolekcionēja vislielāko hitu skaitu bija:

Savukārt, ja skatamies arī uz Syndicated views, tad pirmajās vietās (pateicoties maniem rss lasītājiem) ir:

Savukārt vismazāk lasītais raksts ir bijis SQL Server 2008 oficiāli ir klāt (18 reizes). Visvairāk cilvēku uz šo lapu ir atceļojuši no Datuves (539 reizes), nekur.lv (237 reizes) un šī wikipēdijas raksta (229 reizes), savukārt visvairāk aizceļojuši prom uz manu mājaslapu angļu valodā (136 reizes), Beginner SQL tutorial (120 reizes), un Kalvja Apsīša webkursiem (89 reizes).

Visbiežāk lietotās meklēšanas frāzes ir jēdzieni (34 reizes), interneta resursi (28 reizes), datu kvalitāte (24 reizes). Dažas no meklēšanas frāzēm gan ir bijušas ļoti interesantas, jādomā, vai tiešām cilvēkiem izdevās atrast to, ko viņi meklēja, piemēram, “auto izgāztuve”, “ko nozime vards mudaks?”, “auto bremžu sistēmas grafiskā shēma”, “teikumi kas sākas ar vienādiem burtiem”, “kādu minivenu izvēlēties”, bet vislabāk, protams, man patika šis – “jaunkundze pie ginekologa:D

Atskats uz padarīto

Ir vairākas lietas, ko es sākotnēji biju iecerējis un kas ir izdevušās:

  • esmu aprakstījis dažas SQL pamatlietas un vismaz daļu DML teikumu sintaksi (Select, Insert, Merge);
  • skatoties uz statistiku, meklēšanas atslēgfrāzēm un apmeklējumu skaitu dienā, vismaz daļa cilvēku Latvijā par šo lapu ir informēti;
  • šis emuārs ir redzams gan standarta emuāru apkopojumā nekur.lv, gan arī draugiem.lv ziņu/blogu sadaļā;
  • esmu izvērsis nelielu “mārketinga” kampaņu gan ar rakstu Sakaru pasaulē, gan piedalīšanos pēc dažām dienām Oracle dienā 2008;
  • mana ideja par to, ka nekoncentrējos tikai uz vienu man labi zināmo DBVS Oracle, ir devusi diezgan daudz atklājumu arī man pašam. Esmu uzzinājis daudz jaunas lietas par SQL Server un MySQL, to iespējām un īpašībām. Mēģinot saprast un līdz galam klasificēt tabulu kombinēšanas un savienojumus, es gala rezultātā pārtulkoju šos rakstus angliski, vēl piepucēju un tagad SQL join types ir kļuvis par “mērenu hitu” pāsvarā lietotājiem no Indijas un ASV manā angliskajā lapā;
  • Šī ideja (nekoncentrēties tikai uz Oracle) deva arī interesantu atklājumu – cilvēkam, kas par kaut kādu konkrētu jomu nemaz tā ļoti aktīvi neseko līdz, bet tikai šada tad kaut ko palasa, ir diezgan grūti uzzināt par potenciāliem pasākumiem Latvijā. Šķiet paradokss, jo kas gan var būt vieglāk mūsdienu interneta laikmetā? Taču, piemēram, nesenais Software Freedom Day pasākums un tam sekojošā diskusija php.lv forumā liecina tika par to, ka, ja kāds vēlas, lai par viņa pasākumiem uzzin potenciāli ieintersētās masas un vēl vairāk - lai tos apmeklē, tad tam ir jāvelta pūles un nevis jācer, ka viss notiks pats no sevis. Protams, ja mērķis nav pasākumu padarīt pēc iespējas visiem zināmu, tad tā ir pavisam cita lieta.
  • galvenokārt pēdējā mēneša laikā esmu sācis informēt par tehniskiem pasākumiem, kas notiek saistībā ar datubāzēm (pirms tam īsti jau arī nebija par ko informēt). Bezmaksas pasākums Oracle diena 2008 un ļoti tehniskais salīdzinoši lētais Tanel Poder seminārs ir tie, kas vēl nav nokavēti. 
  • esmu visumā ļoti apmierināts ar wordpress servisu un lietošanas ērtumu kā tādu (salīdzinot ar blogspot.com, kur ir mans angliskais blogs), tikai vienīgi žēl, ka wordpress ir monopolizējis google analytics un ir jāskatās tās tādā veidā kā piedāvā wordpress un punkts, kaut gan google analytics piedāvā krietni vairāk iespēju :( Tas ir vienīgais, kas ik pa laikam mani tracina šeit.

Ir vismaz viena lieta, kas nav izdevusies, – es sākotnēji biju iecerējis šo pasākumu kā ne gluži manu personīgo vietni, bet, ja neskaita vienu izņēmumu (Nedaudz par SQL*Plus), tad visus pārējos rakstus esmu rakstījis pats. Jau pašā sākumā es aizsūtīju epastu par šo ideju bariņam vairāk vai mazāk pazīstamu un kompetentu ļaužu. No dažiem saņēmu vismaz morālus uzmundrinājumus, no dažiem nesaņēmu neko. Lai cik tas nebūtu dīvaino no kādiem 6-7 LU pasniedzējiem neatbildēja neviens un arī LU forumā (Par pasniedzēju aktivitāti ārpus tiešajiem pienākumiem) neviens uz manu aicinājumu līdz šim nav atsaucies vai pat izrādījis vēlmi kaut ko atbildēt. Es gan biju tādā maldīgā pārliecībā, ka macību spēki varētu būt vieni no pirmajiem, kas varētu tiešā vai netiešā veidā ko pasākt, bet acīmredzot ārpus sava tiešā darba universitātēs no viņiem velti ko gaidīt. Un tas, ko es no viņiem sagaidītu, nav nākt un rakstīt rakstus šeit, bet vispār dot cilvēkiem publisku informāciju latviski jebkurā vietnē par savu mācāmo tēmu. Bet, ja neskaita dažus izņēmumus (piemēram, šeit un šeit, protams, viņi noteikti nav vienīgie un jau iepriekš atvainojos tiem, kas nav uzskaitīti), tad man par to vismaz nekas nav zināms. Var jau būt, ka visas manas vēstules nokļuva mēstuļu kastītē un es te velti sūdzos ;) Taisnība jau beigu beigās būs vien manai sievai, kas teica, ka būs vesels bars cilvēku, kas man sitīs uz pleca un teiks malacis, bet neviens, kas varētu vēl ko reālu pasākt :D
Tad nu ar šo lietu esmu jau apradis un vairs pat īpaši neceru, ka vēl kāds autors pievienosies, lai gan, protams, būtu ļoti priecīgs par šādu neparedzētu gadījumu. Varu solīt jau relatīvi stabilu un atļaušos cerēt, ka ieinteresētu audotoriju, par tēmām, kas saistītas ar datubāzēm (kā to var spriest gan pēc tiešajiem, gan rss pieprasījumiem).

Pāris vārdi par nākotni

Pašlaik krājumā stāv 7 melnraksti, pie kuriem iedvesmas brīžos šad tad pārmaiņus pieķeros. Tā ir standarta situācija, ka vienu līdz galam ne vienmēr uzreiz izdodas novest, kādu iesāku, tad pāreju pie cita un tad beidzot kādā brīdī pabeidzu līdz galam. Lai arī, protams, šos rakstus uzcepināt nav nekas pārbriesmīgs, bet zināmu piepūli prasa, gan lieku reizi izpētot dokumentāciju, gan testējot kā tas praktiski izdodas. Negribas jau nevienam īpaši uzbraukt, bet tas nav gluži tā, ka no rīta pamostos un tagad fiksi iemetīšu kādas dažas rindkopas par Gruzijas karu, šonakt nosapņoto vai vakar Rimī redzēto slikto pārdevēju. Tai pašā laikā arī šādi temati, protams, prasa māku to darīt, tikai mazliet citādu.

Domāju, ka pasākums apmēram tādā pašā garā arī turpināsies, jo tematu par ko rakstīt jau vēl ir ojojoj :) Principā, ja kādam ir kādas īpašas vēlmes, lūdzu izsakiet tās šeit vai kur citur piemērotā vietā. Es esmu iespēju robežās gatavs tās ņemt vērā un vismaz viens precedents jau ir – raksts par analītiskajām funkcijām radās pēc kāda lietotāja vēlmes boot.lv forumā. Lūdzu arī informējiet mani (emuāra komentāros vai izmantojot e-pastu gints.plivna@gmail.com) par informāciju, kas varētu būt interesanta Latvijas auditorijai, kas interesējas par datubāzēm. Pirmām kārtām tie varētu būt dažādi pasākumi, kas saistīti ar datubāzēm. Šī nepārvērtīsies par mārketinga vietni, bet informāciju par vairāk vai mazāk tehniska rakstura pasākumiem es labprāt publicētu, kā jau to esmu darījis līdz šim. Katru rakstu pirmajā dienā izlasa vairāk par 200 cilvēkiem (rss pieprasījumu skaits), tā kā tas varētu būt izdevīgi arī Jums :)

Nobeigumā paldies Tev, ka lasi šo emuāru! Es vēl joprojām ļoti labi atceros pirms kāda laika .NET seminārā (jā esmu bijis arī uz tādiem ;) ) kāda ASV lektora dzirdēto, ka IT ir joma, kurā nepārtraukti ir jāmācās; ja gribi kaut ko iemācīties un tad atlikušo mūžu dzīvot tikai ar to, tad IT nav priekš Tevis. Un tā ir neapšaubāma taisnība arī par datubāzēm, ik pāris gadus nāk jaunas versijas, jaunas iespējas, jāskatās, ko tās dod un kas nāk klāt. Interesējieties gan šeit ;) gan visur kur citur, lai nepaliktu kaut kādā sastinguma punktā tikai ar zināšanām, kas iegūtas pirms 10 gadiem.

Jo īpašs paldies manam vienīgajam kolēģim autoram un tiem lasītājiem, kas tieši vai netieši šo vietni arīdzan popularizē forumos, epastos un jebkurā citā veidā!

Gints

P.S. Ja kāds vēlas redzēt manu feisu ;) , tad esmu papildinājis sadaļu “Par” ar savu diezgan oficiālu attēlu, kāds izskatos lasot Oracle kursus Affecto Latvia (bijušais Mebius IT).

P.P.S. Pašās beigās Wordles bilde ar pēdējo 10 ierakstu populārākajiem vārdiem, lai beidzot saprastu par ko tad šis emuārs raksta :)

Datubāzu saturs