[Base] Użytkownicy i hasła

Dokumentacja tworzona przez użytkowników dla użytkowników
mg2
Posty: 170
Rejestracja: czw sty 28, 2010 9:20 pm

[Base] Użytkownicy i hasła

Post autor: mg2 »

"BASE - użytkownicy i hasła"

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;
- zapisz jako "system_tables", zamknij i otwórz kwerendę do wglądu
- 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;
- zapisz jako "system_users", zamknij i otwórz kwerendę do wglądu

c)
- menu "Narzędzia" -> "SQL" ...
- wpisz polecenie

Kod: Zaznacz cały

create user uzyt password
- zajrzyj do kwerendy "system_users"

- menu "Narzędzia" -> "SQL" ...
- wpisz polecenie

Kod: Zaznacz cały

connect user uzyt password ""
d)
- 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
- zapisz bazę
- 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.*
- otwórz (w ulubionym edytorze txt) plik content.xml
- znajdź fragment

Kod: Zaznacz cały

is-password-required="false"
- zmień "fase" na "true"
- zapisz plik
- spakuj pliki zpowrotem w bazę

Kod: Zaznacz cały

zip -r baza.odb *
- otwórz plik "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
- pojawiają się komunikaty

[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
(baza0 - jak alias przy uruchamianiu serwera, zamiast "mydb")

- podajemy "Klasa sterownika JDBC"

Kod: Zaznacz cały

org.hsqldb.jdbcDriver
- klikamy "Sprawdź klasę"

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
- zapisz, zamknij OOo
- 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
- utwórzmy dwóch użytkowników z hasłami

Kod: Zaznacz cały

create user uzyt_a password uzyt_a
create user uzyt_b password uzyt_b
- utwórzmy trzy tabele

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))
pozwólmy użytkownikowi "uzyt_a" na odczyt tabeli "ta" i "uzyt_b" na odczyt "tb"

Kod: Zaznacz cały

grant select on "ta" to uzyt_a
grant select on "tb" to uzyt_b
- tabla "tc" będzie widoczona wyłącznie przez administratora

- 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ż :)
Ostatnio zmieniony pt mar 19, 2010 3:45 pm przez quest-88, łącznie zmieniany 1 raz.
Powód: Zmiana tytułu
OOo3.1.1 na Ubuntu 9.04
Jan_J
Posty: 4583
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: [Base] Użytkownicy i hasła

Post autor: Jan_J »

Uchchch, .... przeczytałem. Ale odtworzyć z marszu -- nie miałem już siły.
W założeniu emedded DB to jest coś małego, więc dostęp z pominięciem kontroli uprawnień nie dziwi mnie za bardzo. Coś jakby SQLite. Za to JDBC -- tu kontrola jest na zewnątrz klienta, i jeśli nie ma kaczanów w bibliotece serwera, to raczej nie będzie się dało jej ominąć.
Ale warto zdawać sobie sprawę, że ,,móc być bezpiecznym'' i ,,być bezpiecznym'' to dwie różne rzeczy. Dzięki za interesujący temat.
PS czy nie ma o tym nic w dokumentacji?
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
ODPOWIEDZ