Domyślnym silniekiem programu BASE jest HSQLDB. W jego dokumentacji możemy znaleźć informacje, że obsluguje on zarządzanie uprawnieniami dostępu:
http://hsqldb.org/doc/2.0/guide/guide.html
Funkcje:
CREATE TABLE (default clause)
CREATE USER
DROP USER
ALTER USER ... SET PASSWORD
ALTER USER ... SET INITIAL SCHEMA
SET PASSWORD
...
itd.
Pytanie, w jakim stopniu można posługiwać się prawami dostępu w BASE przy użyciu domyślego silnika? Poniższe punkty są zalążkiem odpowiedzi na to pytanie.
TEST (dla ciekawskich)
=========================
a)
- utwórz katalog
- w katalogu utwórz nową bazę danych
- menu "Wstaw" -> "Kwerenda (tryb SQL) ..."
- wpisz polecenie (wielkość liter jest ważna !!!)
Kod: Zaznacz cały
select * from INFORMATION_SCHEMA.SYSTEM_TABLES;
- wczytaj się w kolumnę "TABLE_NAME", znajdziesz wpis "SYSTEM_USERS"
b)
- menu "Wstaw" -> "Kwerenda (tryb SQL) ..."
- wpisz polecenie (wielkość liter jest ważna)
Kod: Zaznacz cały
select * from INFORMATION_SCHEMA.SYSTEM_USERS;
c)
- menu "Narzędzia" -> "SQL" ...
- wpisz polecenie
Kod: Zaznacz cały
create user uzyt password
- menu "Narzędzia" -> "SQL" ...
- wpisz polecenie
Kod: Zaznacz cały
connect user uzyt password ""
- zapisz bazę, zamknij OOo i otwórz bazę ponownie
- menu "Narzędzia" -> "SQL" ...
- wpisz polecenia:
Kod: Zaznacz cały
alter user sa set password admin
alter user uzyt set password uzyt
- zamknij OOo !!!
- otwórz bazę ponownie
- kliknij na tabele
- ????? ... "Nie udało się nawiązać połączenia ... Access is denied"
- menu "Narzędzia" -> "SQL" ...
- ????? ... "Nie udało się nawiązać połączenia ... Access is denied"
e)
- zamknij OOo
- rozpakuj plik bazy
Kod: Zaznacz cały
unzip Nowa\ Baza\ Danych.odb
Archive: Nowa Baza Danych.odb
extracting: mimetype
creating: Configurations2/
creating: META-INF/
inflating: content.xml
inflating: database/script
inflating: database/log
inflating: database/properties
creating: reports/
inflating: settings.xml
creating: forms/
inflating: META-INF/manifest.xml
- usuń plik bazy (i ewentualnie plik *.lck)
Kod: Zaznacz cały
rm Nowa\ Baza\ Danych.*
- znajdź fragment
Kod: Zaznacz cały
is-password-required="false"
- zapisz plik
- spakuj pliki zpowrotem w bazę
Kod: Zaznacz cały
zip -r baza.odb *
- podaj użytkownika i hasło
- ????? ... "Nie udało się nawiązać połączenia ... Access is denied"
Wniosek:
BASE łącząc się w sposób domyślny z HSQLDB (otwierając isteniejącą bazę OOo) nie obsługuje haseł.
Włączenie obsługi haseł
=========================
Silnik HSQLDB jest domyślnym przy uruchamianiu BASE. Plik silnika możemy znaleźć w katalogu OOo:
".../katlog_OOo/openoffice.org/basis3.2/program/classes/". Silnik to "hsqldb.jar"
a)
- ponownie zaglądamy na stronę silnika
http://hsqldb.org/doc/2.0/guide/guide.html
i znajdujemy opis uruchomienia bazy w trybie serwera
HyperSQL HSQL Server
java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file:mydb --dbname.0 xdb
- ścieżki do javy oraz hsqldb muszą być ustawione w systemie, inaczej musimy sami je wpisać
- przy braku ustawionych ścieżek wpisujemy (podając prawidłwe ścieżki)
Kod: Zaznacz cały
ścieżka_do_javy/java -cp ścieżka_do_silnika/hsqldb.jar org.hsqldb.server.Server --database.0 file:ścieżka_do_bazy/baza0 --dbname.0 baza0
[Server@8813f2]: [Thread[main,5,main]]: checkRunning(false) entered
[Server@8813f2]: [Thread[main,5,main]]: checkRunning(false) exited
[Server@8813f2]: Startup sequence initiated from main() method
[Server@8813f2]: Loaded properties from [ścieżka/server.properties]
[Server@8813f2]: Initiating startup sequence...
[Server@8813f2]: Server socket opened successfully in 4 ms.
[Server@8813f2]: Database [index=0, id=0, db=file:ścieżka_do_bazy/baza0, alias=baza0] opened sucessfully in 256 ms.
[Server@8813f2]: Startup sequence completed in 261 ms.
[Server@8813f2]: 2010-03-18 22:54:42.042 HSQLDB server 1.8.0 is online
[Server@8813f2]: To close normally, connect and execute SHUTDOWN SQL
[Server@8813f2]: From command line, use [Ctrl]+[C] to abort abruptly
- tak uruchomiony serwer zapewnia nam dostęp do bazy "baza0"
- jeżeli chcemy utworzyć drugą bazę zmieniamy numery "X" przy "--database.X" "--dbname.X" i nazwę pliku bazy
- Wszystkie pliki OOo (pomimo różnych nazw) utworzone podczas jednego uruchomiania serwera będą się odwoływały do tej samej bazy!!!
b)
- uruchamiamy OOo
- menu "Narzędzia" -> "Opcje ..." -> "Java" -> "Ścieżka do klas" -> "Dodaj archiwum" ...
- idziemy do pliku hsqldb.jar (ścieżka jak cześniej, w katalogu OOo)
- "Otwórz" -> "OK" -> "OK"
- zrestartuj OOo
c)
- uruchamiamy BASE i łączymy się z bazą udostępnioną przez serwer
- zamiast towrzenia nowego pliku w oknie startowym wybieramy opcję
"Połącz z istniejącą bazą danych" -> "JDBC" ... "Dalej >>"
- ponownie zaglądamy na stronę silnika
Using OpenOffice.org as a Database Tool
jdbc;hsqldb:hsql://localhost/mydb;default_schema=true
- w okienku "URL źródła danych" wpisujemy więc
Kod: Zaznacz cały
hsqldb:hsql://localhost/baza0;default_schema=true
- podajemy "Klasa sterownika JDBC"
Kod: Zaznacz cały
org.hsqldb.jdbcDriver
Sterownik JDBC został załadowany poprawnie
- "Dalej >>" ... "Nazwa użytkownika: sa" ... "[v] Wymagane hasło (zaznacz!!!)" -> "Testuj połączenie":
- użytkownik: sa
- hasło: (puste)
Połączenie zostało nawiązane poprawnie
- "Dalej >>" ... "Utwórz" ... "Nazwa pliku" wpiszmy "baza0" -> użytkownik i hasło jak wyżej
d)
- ustawmy hasło
Kod: Zaznacz cały
alter user sa set password admin
- otwórz plik "baza_serwer"
- kliknij na tabele
- użytkownik sa, hasło admin
- tym razem działa
UWAGI
=====
- hasła są widoczne w plikach bazy tworzonych przez serwer
- włączenie haseł to jedo, rzeczywiste bezpieczeństwo to inny temat
- jeżeli rozpakować pliki *.odb utworzone "normalnie" i "serwerowo" widać, że plik "normalny" ma we wnętrzu katalog "database" zawierający pliki: "log", "properties", "script"
- przypadku pliku serwerowego pliki te zostają utworzone przez serwer przed utworzeniem przez nas pliku "*.odb"
- przypadku bazy "baza0" są to pliki: "baza0.log", "baza0.properties", "baza0.script"
Dostęp do tabel dla różnych użytkowników
==========================================
Na koniec mały przykład jak umożliwić wybranym użytkownikom dostęp do odczytu wybranych tabel:
- utwórz nową bazę "baza1" (zmień numery database, dataname; uruchom serwer; okreś połączenie JDBC, itd.)
- ustawmy haslo administratora
Kod: Zaznacz cały
alter user sa set password admin
Kod: Zaznacz cały
create user uzyt_a password uzyt_a
create user uzyt_b password uzyt_b
Kod: Zaznacz cały
create table "ta" ("id_a" integer primary key, "opis" varchar(20))
create table "tb" ("id_b" integer primary key, "opis" varchar(20))
create table "tc" ("id_c" integer primary key, "opis" varchar(20))
Kod: Zaznacz cały
grant select on "ta" to uzyt_a
grant select on "tb" to uzyt_b
- zamknijmy OOo i otwórzmy ponownie plik
- zalogujmy się jako "uzyt_a"
- zamknijmy OOo i otwórzmy ponownie plik
- zalogujmy się jako "uzyt_b"
I już