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

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.

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.

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.

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 8x (5.83 kB)
Aplikace je včetně zdrojových kódů v jazyce Java