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
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.
Č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.
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á.
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