IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

10. diel - Derby DB - Práva prístupu - Autentizácia

V minulej lekcii, Derby DB - Vytvorenie a odstránenie databázy a tabuľky , sme sa venovali vytváranie a odstraňovanie databázových tabuliek. Dnešné DerbyDB tutoriál bude o autentizáciu.

Podrobný popis nastavenie práv sa nachádza v Security guide.pdf (tvz. Identity v Derby). Derby má trochu odlišný spôsob nastavovania prístupu k databázam a tabuľkám oproti štandardným databázam typu napr. MySQL, MS-SQL, PostgreSQL, apod. Ďalej nedisponuje žiadnym GUI nástrojom (ako napr. Workbench u MySQL) pre správu práv a všetko sa musí riešiť cez IJ nástroj alebo programovo cez Javu, čo osobne považujem za veľký nedostatok oproti spomínaným databázam.

Pre systém prístupu a prácu s Derby databázou nepotrebujeme mať viac užívateľov. Možno mať len jedného, ktorý má prístup ku všetkému (tzv. Správcu databázy = stvoriteľ databázy). Tento správca má následne prístup do každej tabuľky so všetkými právami (čítanie, zápis, úpravy, zmazanie, a pod.). Avšak z dôvodu bezpečnosti, správy a kontroly sa toto neodporúča. Avšak ak by ste používali embedded databázu ako súčasť desktop aplikácie pre úschovu dát, potom je systém práv v tomto prípade úplne zbytočný.

V nasledujúcich lekciách si predvedieme niečo o nastavenie práv prístupu s viacerými užívateľmi.

Pre nastavenie prístupu k databáze sa využívajú tieto činnosti:

  • Autentizácia (Authentifica­tion): Dochádza k overenie predtým, než používateľ dostane prístup (napr. Pri prihlasovaní k databáze).
  • Autorizácia (Authorization): Po úspešnom overení dôjde k pridelenie práv (napr. Práva prístupu, čítanie, zápis a pod ...).

Autentizácie

Derby DB podporuje 3 typy (módy) autentizácia: LDAP, NATIVE a USER-DEFINE.

  • LDAP je mód, kedy sa o autentizáciu stará LDAP directory service. Ide o službu bežiaci na rovnakom alebo inom počítači. Teda je nutné vykonať nakonfigurovanie Derby Serveru pre túto službu. Toto je výhodné ak spravujete overovanie k viac prístupom a službám centrálne. Nevýhodou je nižšia bezpečnosť.
  • NATIVE mód je spôsob, kedy sú heslá užívateľov uložené v samotnej databáze. Tento mód si predvedieme.
  • USER-Define je mód, kedy si spravujeme logiku potrebnú pre overovanie používateľov sami.

Autorizácia

Derby Db podporuje 2 typy (módy) autorizáciou: Coarse-grained authorization, Fine-grained authorization.

  • Coarse-grained authorization (tzv. Hrubozrnné oprávnenie) je, keď vlastník databázy rozdelí užívateľa do dvoch skupín. Jedna skupina má plnú autoritu pre čítanie a zápis, druhá skupina má právo iba čítať (vzorový príklad s logikou vysvetlenie je priamo v Security guide.pdf). Hrubozrnnej delenie nie je príliš optimálne, pretože neumožňuje izolovaný prístup jednotlivých užívateľov.
  • Fine-grained authorization (tzv. Jemnozrnnej oprávnenia) známe ako štandardné SQL oprávnenie. V tom vlastník databázy či jednotliví používatelia alebo skupiny nastaví podrobnejšie SQL GRANT / REVOKE príkazy (otázky). Príkaz GRANT sa používa na udelenie konkrétnych oprávnenie užívateľom alebo rolám alebo k udeleniu rolí k užívateľom alebo k rolám. Príkaz REVOKE sa používa na odobratie oprávnenia a rolí. Príkazy, ktoré sa povoľujú (GRANT) alebo zakazujú (REVOKE), sú: DELETE / EXECUTE / INSERT / SELECT / REFERENCES / TRIGGER / UPDATE.

Príklad

Ako príklad si vykonáme nastavenie práv s autentizáciou NATIVE as autorizáciou kombinácia COARSE grained + FINE grained. Je to z toho dôvodu, že táto kombinácia je ako príklad najvhodnejší. Len pripomeniem, že stvoriteľ databázy je jej vlastník (tzv. Superpoužívateľ), má práva pre pridávanie užívateľov a nastavovanie práv prístupu, ak si ich sám v neskoršej časti neupraví. V tomto tutoriále si predvedieme nastavenie autentizácie, tzn. vytvoríme (pridáme) používateľa do DerbyDB.

Nastavenie autentizácia (Authentification) cez IJ

Najskôr si postup predvedieme cez konfiguračný príkaz IJ. Prihlásime sa a vytvoríme databázu. Ak chceme pridať nových používateľov, je nutné najskôr pridať používateľa, ktorý bol použitý pri tvorbe databázy a je jej vlastník. Po pridaní používateľov je nutné databázu vypnúť (reštartovať). Potom sa už k danej databáze prihlásime ako novo vytvorenie užívatelia.

ij version 10.13
ij>connect 'jdbc:derby:databaze10;create=true;user=uzivatel10;password=heslo10';
ij>call SYSCS_UTIL.SYSCS_CREATE_USER( 'uzivatel10', 'heslo10' );
ij>call SYSCS_UTIL.SYSCS_CREATE_USER( 'uzivatel10a', 'heslo10a' );
ij>call SYSCS_UTIL.SYSCS_CREATE_USER( 'uzivatel10b', 'heslo10b' );
ij>call SYSCS_UTIL.SYSCS_CREATE_USER( 'uzivatel10c', 'heslo10c' );
ij>connect 'jdbc:derby:databaze10;shutdown=true';
ij>disconnect;
ij>exit;

výsledok:

IJ autentizácie v DerbyDB - DerbyDb

Vytvorenie užívateľov programovo

Testovací príklad si vytvoríme ako nový Java SE projekt v našom IDE. V menu vyberieme File -> New -> Java Project. Pomenujeme projekt a nastavíme JRE Java8. Pridáme opäť externé knižnice do nášho projektu do CLASSPATH. Ide o tieto externé knižnice:

  • derbyclient.jar
  • derbytools.jar
  • derbyoptionaltools.jar

Čo v kóde urobíme? Vytvoríme objekt spojenie, cez objekt dotazu zavoláme IJ a cez ten uložíme nových používateľov. A potom sa odpojíme, čím vlastne vykonáme reštart databázy. Potom sa môžete skúsiť prihlásiť cez IJ nástroj ako užívateľ uzivatel10c, ako to ide vidieť zo screenshotu.

package datab;
import java.sql.*;
public class VytvoreniAutentifikace {

    private static Connection connect = null;
    private static PreparedStatement statement = null;

    static {
        try {
            Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
            System.out.println("Problem s nactenim driveru - nutne pridat do CLASSPATH");
        }
    }

    private static void pripojeniDatabaze() {
        try {
            connect = DriverManager.getConnection("jdbc:derby:C:/Program Files/JavaJDK8_144/db/bin/databaze10;create=true;user=uzivatel10;password=heslo10;");
            System.out.println("Podarilo se pripojit k databazi10");
        } catch (Exception e) {
            System.err.println("Nepodarilo se pripojit k databazi10");
            if (connect == null) {
                System.exit(1);
            }
        }
    }

    private static void pridameUzivateleNATIVE(String user, String pass) {
        String prikaz = "CALL SYSCS_UTIL.SYSCS_CREATE_USER(?,?)";
        try {
            statement = connect.prepareStatement(prikaz);
            statement.setString(1,user);
            statement.setString(2,pass);
            statement.executeUpdate();
            System.out.println("Povedlo se pridat uzivatele : "+user);
        } catch (SQLException e) {
            System.out.println("Nepovedlo se pridat uzivatele :"+user);
            e.printStackTrace();
        }

    }

    private static void odpojimeDatabazi() {
        try {
            if (statement != null) {
                statement.close();
            }
            if (connect != null) {
                connect.close();
            }
            System.out.println("Podarilo se odpojit od databaze");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        System.out.println("Start Programu");
        pripojeniDatabaze();
        pridameUzivateleNATIVE("uzivatel10","heslo10");
        pridameUzivateleNATIVE("uzivatel10a","heslo10a");
        pridameUzivateleNATIVE("uzivatel10b","heslo10b");
        pridameUzivateleNATIVE("uzivatel10c","heslo10c");
        odpojimeDatabazi();
        System.out.println("Konec Programu");
    }
}

Prečo PreparedStatement a nie Statement ? Je to preto, že objekt dotazu Statement spôsobí pád programu, má problém so String ya volanie "CALL" nie je podporované. DerbyDB s ním jednoducho padá (viď. ReferenceDB.pdf).

JavaAuthentifikace v DerbyDB - DerbyDb

Teraz hlavne nezabudnite reštartovať Derby Server (tvz. Vypnúť a zapnúť). Nabudúce, v lekcii Derby DB - Práva prístupu - authorizáciu , si predvedieme nastavení autorizácie.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 5x (5.27 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java

 

Predchádzajúci článok
Derby DB - Vytvorenie a odstránenie databázy a tabuľky
Všetky články v sekcii
DerbyDb
Preskočiť článok
(neodporúčame)
Derby DB - Práva prístupu - authorizáciu
Článok pre vás napísal Robert Michalovič
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Programuji převážně v Javě SE,EE a trochu nativním C a CUDA. více viz.https://cz.linkedin.com/in/robert-michalovic
Aktivity