IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 11 - Derby DB - Práva přístupu - Autorizace

V minulé lekci, Derby DB - Práva přístupu - Autentizace, jsme se pobavili o autentizaci a autorizaci v databázi Apache DerbyDB a provedli autentizaci uživatele NATIVE možností. Doufám, že jste nezapomněli databázi restartovat.

V dnešním tutoriálu provedeme nastavení práv přístupu (autorizaci) možností COARSE. Nastavení uživatelských práv můžeme provést přes příkaz:

CALL SYSCS_UTIL.SYSCS_SET_USER_ACCESS

nebo přes:

CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY

Typy práv přístupu u COARSE jsou:

  • FULLACCESS - Přidá uživatele do seznamu uživatelů se všemi právy k přístupu k databázi (čtení, mazání, úpravy, vložení).
  • READONLYACCESS - Přidá uživatele do seznamu uživatelů pouze s právem čtení po přístupu k databázi.
  • null - Odstraní uživatele ze seznamu uživatelů.

Právo nastavení a konfigurace databázového serveru má pouze stvořitel databáze, stejně jako právo přístupu ke všem tabulkám. FULLACCESS je platný pouze pro tabulky, ke kterým byl uživateli garantován přístup.

Nastavení autorizace (Authorization) přes IJ

Postup si opět předvedeme přes konfigurační příkaz IJ. Přihlásíme se k databázi, kterou jsme vytvořili v předchozí lekci. Jako první provedeme nastavení vlastností databáze přes SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY (viz. ReferenceDB.pdf). Nejdříve nastavíme derby.database.propertiesOnly na true (viz. ReferenceDB.pdf), což způsobí, že DerbyDB bude akceptovat pouze zvolená nastavení. No a poté si pouze definujeme přístupy našim uživatelům pomocí vlastností derby.database.fullAccessUsers a derby.database.readOnlyAccessUsers.

Jako prvního uživatele musíme nastavit stvořitele databáze. 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é a můžeme zkoušet práva přístupu.

ij version 10.13
ij>connect 'jdbc:derby:databaze10;user=uzivatel10;password=heslo10';
ij> call SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.propertiesOnly', 'true' );
ij> CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.fullAccessUsers', 'uzivatel10');
ij> CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.fullAccessUsers', 'uzivatel10a');
ij> CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.readOnlyAccessUsers', 'uzivatel10b');
ij> CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.readOnlyAccessUsers', 'uzivatel10C');
ij> disconnect;
ij> exit;

Nastavení uživatelů programově (autorizace)

Vytvoříme testovací příklad jako projekt v Java SE v našem IDE. V menu zvolíme File -> New -> Java Project. Pojmenujeme jej a nastavíme JRE Java8. Přidáme opět externí knihovny do našeho projektu do CLASSPATH. Ty jsou následující:

  • derbyclient.jar
  • derbytools.jar
  • derbyoptionaltools.jar
Vytvoření příkladu autorizace v DerbyDB v Javě - Derby DB

Pokud jste si prohlíželi cestu k připojení, určitě jste si všimli, že jsem změnil umístění Javy, tak to zohledněte také, pokud přesně opakujete můj postup.

Nastavení projektu autorizace v DerbyDB databázi v Javě - Derby DB

Co v kódu uděláme? To se samé, co vždy. Vytvoříme objekt spojení, přes objekt dotazu zavoláme IJ. Jako první nastavíme používání vlastností u DerbyDB a poté jednotlivým uživatelům nastavíme jejich práva. Po provedení se od databázového serveru odpojíme.

package datab;
import java.sql.*;

public class NastaveniPravUzivatelu {

    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/JavaJDK08/db/bin/databaze10;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 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();
        }
    }

    private static void nastaveniProPridaniPrav() {
        CallableStatement cs = null;
        try {
            cs = connect.prepareCall("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY (?,?)");
            cs.setString(1,"derby.database.propertiesOnly");
            cs.setString(2,"true");
            cs.execute();
            System.out.println("Nastavit pro rezim prav se podarilo");
            cs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    private static void pridameUzivPrava(String jmenoUzivatele,String typPrav) {
        CallableStatement cs = null;
        try {
            cs = connect.prepareCall("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY (?,?)");
            cs.setString(1,typPrav);
            cs.setString(2,jmenoUzivatele);
            cs.execute();
            System.out.println("Priradit prava "+jmenoUzivatele);
            cs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        System.out.println("Start Programu");
        pripojeniDatabaze();
        nastaveniProPridaniPrav();
        //  Stvoritel databaze musi BYT PRVNI
        pridameUzivPrava("uzivatel10","derby.database.fullAccessUsers");
        pridameUzivPrava("uzivatel10a","derby.database.fullAccessUsers");
        pridameUzivPrava("uzivatel10b","derby.database.readOnlyAccessUsers");
        pridameUzivPrava("uzivatel10c","derby.database.readOnlyAccessUsers");
        odpojimeDatabazi();
        System.out.println("Konec Programu - NUTNO RESTARTOVAT DATABAZI");

    }
}

Jak vidíme, kód proběhl v pořádku.

Spuštění DerbyDB příkladu autorizace v Javě - Derby DB

Po proběhnutí kódu si spustíme IJ a zkusíme si nechat vypsat verzi databáze pod různými uživateli. Nejdříve jako vlastník databáze, kdy se výpis provede. Pak jako uživatelé, výpis se již neprovede.

Test autorizace DerbyDB databáze v IJ - Derby DB

Příště, v lekci Derby DB - Práva přístupu k databázi - Vložení dat, si předvedeme vytvoření tabulky a dat s právem čtení pro všechny.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

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

 

Předchozí článek
Derby DB - Práva přístupu - Autentizace
Všechny články v sekci
Derby DB
Přeskočit článek
(nedoporučujeme)
Derby DB - Práva přístupu k databázi - Vložení dat
Článek pro vás napsal Robert Michalovič
Avatar
Uživatelské hodnocení:
1 hlasů
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