Firebird és a felhasználók?

Firebird és a felhasználók?
2006-06-12T09:53:48+02:00
2006-06-12T19:56:02+02:00
2022-10-31T06:00:41+01:00
coocler
Sziasztok!

Nagyon kezdő vagyok, ezért kérek segítséget abban, hogy hogyan lehet az adatbázisaimhoz hozzáadni egy USER-t? Firebird 1.5-t használok, és ha hozzáadom a saját tábláimhoz akkor ezenkívül kell-e még más táblába hozzáadni? Valamint milyen komponenseket kellene használnom a Delphi-ből? És ezzel kapcsolatosan van még egy kérdésem, ha csatlakoztatok egy felhasználót, akkor hogyan tudom visszakérni a SERVER-től hogy az a felhasználó aktív-e vagy nem?

Köszönettel : Coocler.
Mutasd a teljes hozzászólást!
Rossz hírem van. Mégnéztem pontosan és sajnos egyik rendszertábla sem tartalmaz infót a kapcsolódó CONNECTION-ökről.

Bár szerintem nem kell ezt a beszakadást túlmisztifikálni, ritkán fordulhat elő. De ha mégis el szeretnéd kerülni az ezzel járó nyűgöt, akkor van még egy megoldás:
- a BELEPES táblában tárolod az utolsó aktív időpillanatát a usernek (CURRENT_TIMESTAMP)
- csinálsz egy timer-t, ami bizonyos időközönként frissíti a BELEPES táblában ezt a mezőt. (A főformra ledobod, így állandóan megy, valamint 1mp-nél ne állítsd sűrűbbre, így nem fog lassítani az az 1db update)
- ha belépésnél már benn-t van a user a táblában, akkor megnézed, hogy aktív-e (az utolsó aktív időpillanat régebbi-e, mint a timered intervalluma), ha régebbi akkor beszakadt és kilövöd, ha nem régebbi, akkor pedig szólsz, hogy az adott user már be van jelentkezve egy másik masinán.

A FIREBIRD user-ek létrehozásától pedig szerintem tartózkodj, annál is inkább, mivel ugyanoda fogsz kilyukadni.
Mutasd a teljes hozzászólást!

  • Létezik egyrészt az usereknek olyan listája, akik csatlakozhatnak a szerverhez (ez a Firebird dolga), és vannak olyan userek, akik beléphetnek a programodba (ezeket te tárolod).
    Mutasd a teljes hozzászólást!
  • A kérdés az volt, hogy hogyan tudhatom meg, melyik user kéri le az adatokat, akár SQL akár ODBC, akár más módon.
    Ha jól tudom a FireBird egy adatbázis szerver, ami nem csak a Delphinek enged hozzáférést...
    Én a Delphivel le szeretném kérdezni, hogy aktuálisan kik garázdálkodnak az adatbázison.
    Illetve esetleg azt is, hogy az elmult egy percben kik garázdálkodtak.
    Mutasd a teljes hozzászólást!
  • Én bizonyos Coocler kérdésére reagáltam, aminek első része így hangzott:

    Nagyon kezdő vagyok, ezért kérek segítséget abban, hogy hogyan lehet az adatbázisaimhoz hozzáadni egy USER-t? Firebird 1.5-t használok, és ha hozzáadom a saját tábláimhoz akkor ezenkívül kell-e még más táblába hozzáadni?

    Mutasd a teljes hozzászólást!
  • Kb az amit Ikario is röviden írt.

    Annyival egészíteném ki, hogy a szerveren a security.fdb-ben vannak tárolva a Firebird userei, amelyek függetlenül a te szoftveredtől léteznek. Többek között itt van tárolva a SYSDBA is a jelszavával együtt. Ennek menedzselésére is meg vannak a megfelelő eszközök, továbbá az IB .PDF doksijaiban is benne van elég sok minden ezzel kapcsolatban.

    Mindezek ellenére szerintem viszont neked nem ezek a dolgok kellenek. Ha a saját programodba bejelentkezett felhasználókat akarod kezelni-követni, akkor FB szinten maradhat mindenki a SYSDBA-ként csatlakozva az adatbázishoz. Nyilván van egy FELHASZNALOK táblád, ahol a lehetséges user-ek vannak eltárolva, esetleg a belépési jelszavukkal és a jogosult programrészekkel. Emellett még érdemes kezelni pl. egy BELEPES táblát, amibe szépen beírogatod a belépés után, hogy ki-mikor lépett be. Az 1.5-ös FB-től felfele a következő eszközök segítik még a munkád: (és érdemes is ezeket felhasználni)

    CURRENT_CONNECTION környezeti változó, ami az aktív kapcsolatot azonosítja.

    Célszerű az említett BELEPES táblában táblában ezt is tárolni, amit ezen tábla triggerében automatikusan tölthetsz. Így a ki-mit-csinált kérdést akár a tárolt eljárásaidban is meg tudod oldani, ugyanis az a műveletet végző user, aki a CURRENT_CONNECTION alapján a BELEPES táblában beazonosítható.

    Első körben ennyi. Ha így oldod meg, akkor lesznek majd felvetődő kérdések (pl. "beszakadt" felhasználók esetei), amelyekre szintén van megoldás (RDB$ rendszer táblák segítségével), de nem kell mindjárt azzal kezdeni...
    Mutasd a teljes hozzászólást!
  • Szóval szarul fogalamaztam meg a kérdésem, a delphi-s része annyiban érdekel, hogy hogyan tudok az FB adatbázis eléréshez felhasználó nevet és jelszót meg jogokat a táblához kiosztani magából a kliensből. Úgy például mint a SYSDBA és a hozzátartozó MASTERKEY. Én is szeretnék az eléréshez külön USERT kiosztani. Ezt ezért gondoltam így mert azt szeretném elérni, hogy egy felhasználó csak egyszer legyen csatklakozva az adatbázishoz, úgyanis a felhasználó alapján azonosítok néhány rekordot a táblákban. És én is egy belépve táblával kezdtem, de a beszakadás problémája lett a próbálkozásom veszte. Ezért arra gondoltam, hogy minden felhasználónak kiosztok jogokat az FB-n és az FB-vel figyeltetem a felhasználók aktív kapcsolatait, így ha valaki beszakadt és újra vissza akar lépni akkor azt az FB alapján dönteném el. Ezért kérdeztem a kérdésem második felében, hogy hogyan tudom lekérni az aktív kapcsolatokat. Ha SYSDBA-val van mindenki bent akkor nem tudom a klienseket megkülönböztetni egymástól, vagy lehetséges lenne valahogy csak én nem tudom hogy hogyan?

    Üdv.: Coocler.
    Mutasd a teljes hozzászólást!
  • Hogyan lehet megoldani a kliensek azonosítását, és beszakadásának kezelését, mert a beléptetés tábla hsználata ennél ért véget számomra.

    Köszönettel: Coocler.
    Mutasd a teljes hozzászólást!
  • A magam részéről roppant szubjektív módon azt tanácsolnám, ne mosd egybe a szerver felhasználóit és a program felhasználóit, még ha elegánsnak is tűnik. (Persze, ha van kedved, miért ne.) Nálam működik a Logged jellegű tábla, a beszakadt usereket pedig egy másik user adott funkcióval ki tudja szabadítani.
    Mutasd a teljes hozzászólást!
  • Én is így oldottam meg, de sajnos ez azért jelentett gondot mert nem mindenhol vannak hozzáértő emberek akiknek mondjuk engeded hogy kezeljék és felülbíráljak a bentlévő klienseket.
    Mutasd a teljes hozzászólást!
  • Bocs, most rohannom kell, később utánanézek pontosan melyik RDB$ rendszer tábla is kell.

    Röviden végülis annyi, hogy a CURRENT_CONNECTION környezeti változókat használd ki, elegánsabb is úgy. Belépéskor pedig ez alapján lehet majd megnézni, hogy a már belépett dolgozó tényleg belépett vagy esetleg beszakadt.

    Másik előnye a CURRENT_CONNECTION-nek, amiért még szeretem, hogy nem kell paraméterként mindig adogatni a tárolt eljárásnak a user-t, hanem egy select-el kideríthető, ha műveletek mellett tárolni akarom, hogy ki csinálta.
    Mutasd a teljes hozzászólást!

  • a delphi-s része annyiban érdekel, hogy hogyan tudok az FB adatbázis eléréshez felhasználó nevet és jelszót meg jogokat a táblához kiosztani magából a kliensből. Úgy például mint a SYSDBA és a hozzátartozó MASTERKEY



    InterBase Admin paletta
    TIBSecurityService komponens

    with IBSecurityService do try Active:=TRUE; UserName:='USER1'; Password:='password'; AddUser; finally Active:=FALSE; end;
    Mutasd a teljes hozzászólást!
  • Rossz hírem van. Mégnéztem pontosan és sajnos egyik rendszertábla sem tartalmaz infót a kapcsolódó CONNECTION-ökről.

    Bár szerintem nem kell ezt a beszakadást túlmisztifikálni, ritkán fordulhat elő. De ha mégis el szeretnéd kerülni az ezzel járó nyűgöt, akkor van még egy megoldás:
    - a BELEPES táblában tárolod az utolsó aktív időpillanatát a usernek (CURRENT_TIMESTAMP)
    - csinálsz egy timer-t, ami bizonyos időközönként frissíti a BELEPES táblában ezt a mezőt. (A főformra ledobod, így állandóan megy, valamint 1mp-nél ne állítsd sűrűbbre, így nem fog lassítani az az 1db update)
    - ha belépésnél már benn-t van a user a táblában, akkor megnézed, hogy aktív-e (az utolsó aktív időpillanat régebbi-e, mint a timered intervalluma), ha régebbi akkor beszakadt és kilövöd, ha nem régebbi, akkor pedig szólsz, hogy az adott user már be van jelentkezve egy másik masinán.

    A FIREBIRD user-ek létrehozásától pedig szerintem tartózkodj, annál is inkább, mivel ugyanoda fogsz kilyukadni.
    Mutasd a teljes hozzászólást!
  • Köszi az utánnajárást, és ez amit javasoltál tényleg jó ötletnek tűnik, ki is próbálom. Az FB usereket nem is akrtam erőltetni, mert pont az a célom, hogy minél kissebb legyen az adatbázis tartalmának a hozzáférhetősége idegenek számára. és persze ha megfejelem egy nagy halom USER-rel akkor növelem a hozzáférhetőség lehetőségeit is. Persze megvédeni az FB adatbázist úgy sem lehet tökéletesen, de azért nem szeretnék tálcán felszolgálni lehetőségeket sem.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd