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

11. diel - Derby DB - Práva prístupu - authorizáciu

V minulej lekcii, Derby DB - Práva prístupu - Autentizácia , sme sa pobavili o autentizáciu a autorizáciu v databáze Apache DerbyDB a vykonali autentizáciu užívateľa NATIVE možností. Dúfam, že ste nezabudli databázu reštartovať. V dnešnom tutoriále vykonáme nastavenie práv prístupu (autorizáciu) možností COARSE. Nastavenie užívateľských práv môžeme vykonať cez príkaz:

CALL SYSCS_UTIL.SYSCS_SET_USER_ACCESS

alebo cez:

CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY

Typy práv prístupu u COARSE sú:

  • FULLACCESS - Pridá používateľa do zoznamu používateľov so všetkými právami na prístup k databáze (čítanie, mazanie, úpravy, vloženie).
  • READONLYACCESS - Pridá používateľa do zoznamu používateľov len s právom čítanie po prístupu k databáze.
  • null - Odstráni užívateľa zo zoznamu užívateľov.

Právo nastavenie a konfigurácia databázového servera má iba stvoriteľ databázy, rovnako ako právo prístupu ku všetkým tabuľkám. FULLACCESS je platný len pre tabuľky, ku ktorým bol užívateľovi garantovaný prístup.

Nastavení autorizácie (Authorization) cez IJ

Postup si opäť predvedieme cez konfiguračný príkaz IJ. Prihlásime sa k databáze, ktorú sme vytvorili v predchádzajúcej lekcii. Ako prvý vykonáme nastavenie vlastností databázy cez SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY (viď. ReferenceDB.pdf). Najskôr nastavíme derby.database.propertiesOnly na true (viď. ReferenceDB.pdf), čo spôsobí, že DerbyDB bude akceptovať iba zvolené nastavenia. No a potom si len definujeme prístupy našim užívateľom pomocou vlastností derby.database.fullAccessUsers a derby.database.readOnlyAccessUsers.

Ako prvého užívateľa musíme nastaviť stvoriteľa databázy. 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 a môžeme skúšať práva prí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;

Nastavenie užívateľov programovo (autorizácia)

Vytvoríme testovacie príklad ako projekt v Java SE v našom IDE. V menu zvolíme File -> New -> Java Project. Pomenujeme ho a nastavíme JRE Java8. Pridáme opäť externé knižnice do nášho projektu do CLASSPATH. Tie sú nasledovné:

  • derbyclient.jar
  • derbytools.jar
  • derbyoptionaltools.jar
Vytvorenie príkladu autorizácie v DerbyDB v Jave - DerbyDb

Ak ste si prezerali cestu k pripojenie, určite ste si všimli, že som zmenil umiestnenie Javy, tak to zohľadnite tiež, ak presne opakujete môj postup.

Nastavenie projektu autorizácie v DerbyDB databáze v Jave - DerbyDb

Čo v kóde urobíme? To sa isté, čo vždy. Vytvoríme objekt spojenie, cez objekt dotazu zavoláme IJ. Ako prvý nastavíme používaní vlastností u DerbyDB a potom jednotlivým užívateľom nastavíme ich práva. Po vykonaní sa od databázového servera 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");

    }
}

Ako vidíme, kód prebehol v poriadku.

Spustenie DerbyDB príklade autorizácie v Jave - DerbyDb

Po prebehnutí kódu si spustíme IJ a skúsime si nechať vypísať verziu databázy pod rôznymi užívateľmi. Najskôr ako vlastník databázy, kedy sa výpis vykoná. Potom ako užívatelia, výpis sa už nevykoná.

Test autorizácia DerbyDB databázy v IJ - DerbyDb

Nabudúce, v lekcii Derby DB - Práva prístupu k databáze - Vloženie dát , si predvedieme vytvorenie tabuľky a dát s právom čítania pre všetkých.


 

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é 7x (5.83 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java

 

Predchádzajúci článok
Derby DB - Práva prístupu - Autentizácia
Všetky články v sekcii
DerbyDb
Preskočiť článok
(neodporúčame)
Derby DB - Práva prístupu k databáze - Vloženie dát
Č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