[FireBird] Warstwy

0

Witam.
Wiem, że trochę męczę tego FireBirda, ale uzupełniam swoje braki wiedzy oraz szukam odpowiedzi na nurtujące mnie od wieków pytania na temat tej bazy. Praktycznie wszystkie moje wątpliwości rozwiązała wersja 2.1 (dzięki bObik za info). Chłopaki ze wschodu naprawdę sporo fajnych rzeczy dodali. Pozostał jeszcze jeden problem - warstwy. Tak to sobie nazwałem :) . Już tłumaczę. Właściwie problem ma 2 wątki:

  1. Mam jakieś konta użytkowników. Łączą się oni z bazą danych przez moją aplikację i chciałbym żeby tak pozostało. Czy jest coś w rodzaju "autoryzowanego (klienta)" połączenia do bazy (oprócz SYSDBA oczywiście)? Chodzi o to, że jak użytkownik ma jakieś pojęcie o bazach danych, to znając IP serwera i posługując się swoim loginem i hasłem, może teoretycznie zalogować się do bazy np. SQL Managerem i napaskudzić mi w bazie. Oczywiście, są prawa dostępu, jeżeli użytkownik ma prawo usuwania jakiś dokumentów w aplikacji, to tutaj też może sobie usunąć, ale właśnie chciałbym mu tego zabronić. Często usuwanie rekordów z jakieś tablicy jest powiązane z innymi instrukcjami które wykonuje aplikacja np. obliczanie statystyk itp. Jest na to jakaś rada?
  2. Podobnie jak powyżej. Jeżeli użytkownik zaloguje sie przez jakiegoś menegera SQL, to żeby nie widział baz/procedur/widoków stworzonych bez SYSDBA, tylko swoje. To w ogóle jest możliwe?
0

Możesz (i spotyka się to często) autoryzację przeprowadzać nie w oparciu o użytkowników Firebird'a tylko w oparciu o zarządzane przez siebie konta (tabelka z użtytkownikami, uprawnieniami). Jeśli chodzi o serwer, to pierwsze co się powinno zrobić, to zmienić hasło na SYSDBA, a bazę zakładać na jakimś nowo założonym użytkowniku - wtedy on stanie sie właścicielem wszystkich obiektów w bazie. Potem program łączy się w oparciu o tego użytkownika. Oczywiście jest to jedno z możliwych rozwiązań, które przekreśla sporo opcji jakie daje praca na użytkownikach firebird'a (zmienne kontekstowe USER itd). W zasadzie jak to pisze, to przyszedł mi do głowy jeszcze jeden pomysł - rozwiązanie hybrydowe : ) Czy i to i tamto. Masz użytkowników Firebird'a którzy odpowiadają użytkownikom programu, tylko np hasło jakoś przekodowywujesz na moment logowania, i już masz z bańki problem że się ktoś bezpośrednio do bazy zaoguje (oczywiście przemilczam problem "jak trudno jest się dostać do bazy Firebird'a bez kont'a i hasła").

Co do grzebania w bazie, to polecam jeszcze zrobić sobie jakiś dziennik zmian wypełniający się w triggerach dla każdej tabeli. Zawsze łatwo dojść kto co wywalił. Oczywiście jak ktoś się coś nie coś łapie, to wyczyści i dziennik zmian : )

Z innych rzeczy jakie mogę podsunąć:

Marekkk1984 napisał(a)

...to znając IP serwera i posługując się swoim loginem i hasłem, może teoretycznie zalogować się do bazy...

to np zmiana domyślnego portu na którym nasłuchuje serwer. Zawsze to jeszcze jedna bariera do przeskoczenia. Od razu zaznaczam że nie są to bariery nie do przeskoczenia, są to opcje które zabezpieczą cię przed jakimś "raczkującym hackerem".

Co do widoczności obiektów w bazie, no to jak nadasz komuś prawa do widzenia procek czy widoków, no to jeśli to uzytkownik Firebird'owy, to siłą rzeczy jak się zapnie do bazy przez jakiegoś Manager'a to też to będzie widział.

0

Właśnie też się zastanawiałem nad czymś w rodzaju hybrydy, to by chyba było najlepsze rozwiązanie, bo nie ma co ukrywać zależy mi właśnie na tych zmiennych USER. Tylko nie bardzo rozumiem co miałeś na myśli przez:

tylko np hasło jakoś przekodowywujesz na moment logowania, i już masz z bańki problem że się ktoś bezpośrednio do bazy zaoguje (oczywiście przemilczam problem "jak trudno jest się dostać do bazy Firebird'a bez kont'a i hasła").

0

Co do przekodowań, chodzi mi o to że w takim rozwiązaniu cel jest taki: użytkownik programu odpowiada użytkownikowi Firebird'a, ale nie ma wystarczających informacji żeby się zalogować bezpośrednio do bazy. Więc albo musisz coś zrobić z login'em albo z hasłem. Byle nie znał obu naraz.

Druga część zdania lapidarnie wyrażała zachyt nad poziomem zabezpieczeń w FB. Kiedyś było jeszcze gorzej, ale teraz podobno jest lepiej. Nie zajmuję się na codzień tego typu rzeczami (jak się dostać etc..) ale pierwszy pomysł jaki mi przyszedł do głowy, żeby się dostać do bazy FB to podmiana bazy użytkowników (oczywiście trzeba wyłączyć FB) i już hulaj duszo na sysdba/masterkey : )

0

Ok, dzięki za podpowiedź! Już mam pewną koncepcję jak to rozwiązać. Mam tylko jedno pytanie, nie chce już z tego robić nie wiadomo jakiej fortecy ale z czystej ciekawości, czy jak użytkownik loguje się do bazy, np. z mojej aplikacji to czy login i hasło lecą w jakiś sposób zaszyfrowane czy to sam "goły" tekst? Akurat nie mam żadnego sniffera pod ręką żeby to sprawdzić.

żeby się dostać do bazy FB to podmiana bazy użytkowników (oczywiście trzeba wyłączyć FB) i już hulaj duszo na sysdba/masterkey
Też gdzieś o tym czytałem że tak się właśnie da, ale to już raczej leży na barkach administratora serwera żeby zabezpieczyć pliki przed niepowołanym dostępem. Moim zdaniem, mimo że FB idzie w świetnym kierunku, to jednak z dostępem do bazy to lekki niewypał. Przynajmniej hasło sysdba powinno być zespolone z bazą a sama polityka trzymania informacji o kontach w osobnej bazie no nie wiem... ma to też swoje zalety jak na serwerze jest kilka baz czy też synchronizacja z kontami windowsa, ale to chyba zdarza się niezwykle rzadko. No ale trudno, ważne że projekt dynamicznie sie rozwija i może w przyszłości... Aha, wersja 2.1 tą są jeszcze snapshoty które automatycznie są generowane ze źródeł CVSa bez uprzedniego testowania. Czy można tego już bezpiecznie używać?

0
Marekkk1984 napisał(a)

Ok, dzięki za podpowiedź! Już mam pewną koncepcję jak to rozwiązać. Mam tylko jedno pytanie, nie chce już z tego robić nie wiadomo jakiej fortecy ale z czystej ciekawości, czy jak użytkownik loguje się do bazy, np. z mojej aplikacji to czy login i hasło lecą w jakiś sposób zaszyfrowane czy to sam "goły" tekst? Akurat nie mam żadnego sniffera pod ręką żeby to sprawdzić.

nie wiem, obstawiam to drugie, nie trudno jednak to sprawdzić

Marekkk1984 napisał(a)

Aha, wersja 2.1 tą są jeszcze snapshoty które automatycznie są generowane ze źródeł CVSa bez uprzedniego testowania. Czy można tego już bezpiecznie używać?

Ja bym tego nie brał do aplikacji "na teraz". Chyba że planujesz ją popisać pare miesięcy - podejrzewam że w takim czasie będzie oficjalne 2.1 - chociaż może gdzieś coś piszą precyzyjniej, w każdym razie z terminami jest licho : ) chociaż ostatnio i tak sie sporo ruszyło.
Ja na razie używam 2.0.3 - jednak dużo bajerów wyszło dopiero w 2.1 - toteż wolał bym 2.1

1 użytkowników online, w tym zalogowanych: 0, gości: 1