Chci geek triko! Chci geek triko!
Extra 10 % bodů navíc a tričko zdarma při zadání kódu "TRIKO10"

Lekce 10 - Derby DB - Práva přístupu - Autentizace

Java Databáze Apache Derby Derby DB - Práva přístupu - Autentizace

Unicorn College ONEbit hosting Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V minulé lekci, Derby DB - Vytvoření a odstranění databáze a tabulky, jsme se věnovali vytváření a odstraňování databázových tabulek. Dnešní DerbyDB tutoriál bude o autentizaci.

Podrobný popis nastavení práv se nachází v Security guide.pdf (tvz. identity v Derby). Derby má trochu odlišný způsob nastavování přístupu k databázím a tabulkám oproti standardním databázím typu např. MySQL, MS-SQL, PostgreSQL, apod. Dále nedisponuje žádným GUI nástrojem (jako např. WorkBench u MySQL) pro správu práv a vše se musí řešit přes IJ nástroj nebo programově přes Javu, což osobně považuji za velký nedostatek oproti zmíněným databázím.

Pro systém přístupu a práci s Derby databází nepotřebujeme mít více uživatelů. Lze mít jen jednoho, který má přístup ke všemu (tzv. správce databáze = stvořitel databáze). Tento správce má následně přístup do každé tabulky se všemi právy (čtení, zápisu, úpravy, smazání, apod.). Ovšem z důvodu bezpečnosti, správy a kontroly se toto nedoporučuje. Nicméně pokud byste používali embedded databázi jako součást desktop aplikace pro úschovu dat, pak je systém práv v tomto případě naprosto zbytečný.

V následujících lekcích si předvedeme něco o nastavení práv přístupu s více uživateli.

Pro nastavení přístupu k databázi se využívají tyto činnosti:

  • Autentizace (Authentification) : Dochází k ověření předtím, než uživatel dostane přístup (např. při přihlašování k databázi).
  • Autorizace (Authorization): Po úspěšném ověření dojde k přidělení práv (např. práva přístupu, čtení, zápisu apod...).

Autentizace

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

  • LDAP je mód, kdy se o autentizaci stará LDAP directory service. Jedná se o službu běžící na stejném či jiném počítači. Tudíž je nutné provést nakonfigurování Derby Serveru pro tuto službu. Toto je výhodné pokud spravujete ověřování k více přístupům a službám centrálně. Nevýhodou je nižší bezpečnost.
  • NATIVE mód je způsob, kdy jsou hesla uživatelů uložena v samotné databázi. Tento mód si předvedeme.
  • USER-DEFINE je mód, kdy si spravujeme logiku potřebnou pro ověřování uživatele sami.

Autorizace

Derby Db podporuje 2 typy (módy) autorizací: Coarse-grained authorization, Fine-grained authorization.

  • Coarse-grained authorization (tzv. hrubozrnné oprávnění) je, když vlastník databáze rozdělí uživatele do dvou skupin. Jedna skupina má plnou autoritu pro čtení a zápis, druhá skupina má právo pouze číst (vzorový příklad s logikou vysvětlení je přímo v Security guide.pdf). Hrubozrnné dělení není příliš optimální, neboť neumožňuje izolovaný přístup jednotlivých uživatelů.
  • Fine-grained authorization (tzv. jemnozrnné oprávnění) známé jako standardní SQL oprávnění. V tom vlastník databáze či jednotliví uživatelé nebo skupiny nastaví podrobnější SQL GRANT/REVOKE příkazy (dotazy). Příkaz GRANT se používá k udělení konkrétních oprávnění uživatelům nebo rolím nebo k udělení rolí k uživatelům nebo k rolím. Příkaz REVOKE se používá k odebrání oprávnění a rolí. Příkazy, které se povolují (GRANT) nebo zakazují (REVOKE), jsou: DELETE/EXECUTE/INSERT/SELECT/REFERENCES/TRIGGER/UPDATE.

Příklad

Jako příklad si provedeme nastavení práv s autentizací NATIVE a s autorizací kombinace COARSE GRAINED + FINE GRAINED. Je to z toho důvodu, že tato kombinace je jako příklad nejvhodnější. Jen připomenu, že stvořitel databáze je její vlastník (tzv. superuživatel), má práva pro přidávání uživatelů a nastavování práv přístupu, pokud si je sám v pozdější části neupraví. V tomto tutoriálu si předvedeme nastavení autentizace, tzn. vytvoříme (přidáme) uživatele do DerbyDB.

Nastavení autentizace (Authentification) přes IJ

Nejdříve si postup předvedeme přes konfigurační příkaz IJ. Přihlásíme se a vytvoříme databázi. Pokud chceme přidat nové uživatele, je nutné nejdříve přidat uživatele, který byl použit při tvorbě databáze a je její vlastník. Po přidání uživatelů je nutné databázi vypnout (restartovat). Poté se již k dané databázi přihlásíme jako nově vytvoření uživatelé.

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ýsledek:

IJ autentizace v DerbyDB

Vytvoření uživatelů programově

Testovací příklad si vytvoříme jako nový Java SE projekt v našem IDE. V menu vybereme File -> New -> Java Project. Pojmenujeme projekt a nastavíme JRE Java8. Přidáme opět externí knihovny do našeho projektu do CLASSPATH. Jedná se o tyto externí knihovny:

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

Co v kódu uděláme? Vytvoříme objekt spojení, přes objekt dotazu zavoláme IJ a přes ten uložíme nové uživatele. A pak se odpojíme, čímž vlastně provedeme restart databáze. Poté se můžete zkusit přihlásit přes IJ nástroj jako uživatel uzivatel10c, jak to jde vidět ze 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");
    }
}

Proč PreparedStatement a ne Statement? Je to proto, že objekt dotazu Statement způsobí pád programu, má problém se Stringy a volání "CALL" není podporováno. DerbyDB s ním prostě padá (viz. ReferenceDB.pdf).

JavaAuthentifikace v DerbyDB

Nyní hlavně nezapomeňte restartovat Derby Server (tvz. vypnout a zapnout). Příště, v lekci Derby DB - Práva přístupu - Authorizace , si předvedeme nastavení autorizace.


 

Stáhnout

Staženo 1x (5.27 kB)
Aplikace je včetně zdrojových kódů v jazyce Java

 

 

Článek pro vás napsal Robert Michalovič
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
Programuji převážně v Javě SE,EE a trochu nativním C a CUDA. více viz.https://cz.linkedin.com/in/robert-michalovi%C4%8D-8a9b9498
Miniatura
Všechny články v sekci
DerbyDb
Aktivity (3)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!