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

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

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

ONEbit hosting Unicorn College 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 - 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ě

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ě

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ě

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

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.


 

Stáhnout

Staženo 1x (5.83 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 (2)

 

 

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í!