-
Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
From: Zbigniew Malec <a...@i...invalid>
Newsgroups: pl.comp.programming
Subject: Re: Aplikacje bazodanowe - bezpieczeństwo
Date: Wed, 29 Jun 2011 21:59:07 +0200
Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
Lines: 176
Message-ID: <pwhuy5c7er9p.ksofwl46csdh$.dlg@40tude.net>
References: <4e09cf5c$0$2438$65785112@news.neostrada.pl> <iuck48$ijr$1@news.onet.pl>
<iucmsh$ue8$4@solani.org> <iucnvv$1hp$1@news.onet.pl>
<iucp8s$83e$1@solani.org> <iucq9m$ake$1@news.onet.pl>
<qtrn2yav8xs.1n3xvs8cc6ljm$.dlg@40tude.net> <iuelec$u2l$1@news.onet.pl>
NNTP-Posting-Host: 89-76-122-84.dynamic.chello.pl
Mime-Version: 1.0
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: 8bit
X-Trace: inews.gazeta.pl 1309377546 21525 89.76.122.84 (29 Jun 2011 19:59:06 GMT)
X-Complaints-To: u...@a...pl
NNTP-Posting-Date: Wed, 29 Jun 2011 19:59:06 +0000 (UTC)
X-User: zbyszanna
User-Agent: 40tude_Dialog/2.0.15.1
Xref: news-archive.icm.edu.pl pl.comp.programming:191263
[ ukryj nagłówki ]On Wed, 29 Jun 2011 09:49:32 +0200, Michal Kleczek wrote:
> Zbigniew Malec wrote:
>
>> On Tue, 28 Jun 2011 17:00:07 +0200, Michal Kleczek wrote:
>>
>>>> Bo granulacja kontroli dostępu w DBMS często nie przystaje do granulacji
>>>> potrzebnej do implementacji kontroli dostępu.
>>>
>>> I to jest czesto dobry argument.
>>> Z drugiej strony mozna sie zastanawiac, czy moze inny (oferujacy
>>> odpowiednie narzedzia/granulacje) DBMS jest lepszym rozwiazaniem?
>>> Oraz czy przypadkiem _rzeczywiscie_ nie przystaje.
>>
>> Nie ma co tego na DBMSa zwalać, bo zwyczajnie nie jesteś w stanie osiągnąć
>> wystarczającej elastyczności.
>
> Tzn. czego np?
> Dobry DBMS oferuje duza elastycznosc jesli chodzi o zarzadzanie dostepem do
> danych - w koncu to system zarzadzania bazami danych.
> Taki Oracle daje chocby VPD.
> Ale i bez tego daje sie sporo osiagnac - chocby:
> http://technet.microsoft.com/en-us/library/cc966395.
aspx
W DBMS masz granulację na poziomie obiektu, a nie rekordu, grupy rekordów,
czy nawet wybranych kolumn z danej grupy wierszy. I tak trzeba logikę
dostępu do danych gdzieś zaszywać z boku i same uprawnienia DBMS i tak nie
wystarczą.
>> Podstawowym kryterium wyboru DBMS na pewno nie
>> jest to, czy można użyć jego modułu zarządzania użytkownikami w swojej
>> aplikacji.
>>
>
> Jest jednym z wielu kryteriow, ktore wynikaja z wymagan dot. sytemu.
Jedny z wielu, zgadzam się że może być brany pod uwagę. Myślę jednak, że są
dużo istotniejsze czynniki w wyborze i ten jeden akurat nie jest tak bardzo
istotny.
>>>> Jak chcesz zorganizować
>>>> prawo do odczytu danych (np. faktur czy zamówień) związanych z jednym
>>>> tylko klientem dla opiekuna tego klienta?
>>>>
>>>
>>> Chocby widoki?
>>
>> Można, ale po co? Żeby osiągnąć odpowiednią elastyczność i tak będziesz
>> musiał dobudować tyle infrastruktury, że dodatkowa tabelka z użytkownikami
>> nie robi żadnej różnicy.
>>
>
> Nie bardzo rozumiem o co chodzi z ta dodatkowa tabelka z uzytkownikami.
> Natomiast jesli chodzi o "dobudowe infrastruktury", to i tak musisz _gdzies_
> te zabezpieczenia zaimplementowac. Moim zdaniem:
> 1) Bedzie taniej wykorzystac to, co juz jest zaimplementowane w DBMS
> 2) Bedzie _bezpieczniej_ uzywac zabezpieczen w DBMS, bo wszelkie rozwiazania
> "custom made" w aplikacji nie moga byc tak dobrze zweryfikowane pod katem
> bezpieczenstwa jak DBMS z polki.
No właśnie i tak gdzies to trzeba zabezpieczenie zrealizować. Dodatkowy
koszt utworzenia tejże tabelki z użytkownikami będzie własnie pomijalny.
Argument kosztu do mnie tutaj nie przemawia, i tak to co jest już w bazie
do zarządzania trzeba dopiero wykorzystać w aplikacji, a więc dorobić całą
logikę dostępu do danych. No i jeszcze dostajemy rozwiązanie, które jest
mocno przywiązane do jednej konkretnej bazy danych. Owszem, zmiana DBMSa to
nie jest mała rzecz, ale jednak się zdarza. A gdzie wsparcie w postaci
technologii typu Hibernate i pokrewnych?
>> W przypadku osób generujących raporty z bazy, albo w inny sposób
>> korzystających bezpośrednio z danych zawartych w bazie danych naturalne
>> jest korzystanie z użytkowników bazodanowych. W przypadku aplikacji
>> korzystającej z tych danych za pośrednictwem serwera aplikacji (albo
>> grubego klienta) już takie naturalne to nie jest, bo użytkownik jest od
>> tej bazy odseparowany i jego tożsamość, to jest tylko kojelny parametr w
>> wykonywanych zapytaniach, a nie element funkcjonalny aplikacji.
>
> Sa przynajmniej dwa problemy z tym rozumowaniem:
> 1. To jest tylko przesuniecie rozwiazania problemu z DBMS do aplikacji.
> Klopot polega na tym, ze weryfikacja oprogramowania pod katem bezpieczenstwa
> jest droga i co za tym idzie aplikacja jest znacznie bardziej narazona na
> bledy niz DBMS (najlepszym przykladem sa wszystkie ataki typu SQL injection
> - wbudowanie zabezpieczen w DBMS chroni dane przed atakami wykorzystujacymi
> bledy w aplikacjach).
> 2. W przypadku aplikacji typu "gruby klient" - jak zapewnic, ze dostep do
> danych bedzie sie odbywal _tylko_ przy pomocy tejze aplikacji?
> 3. Jak rozwiazac problem wielu aplikacji korzystajacych z jednej bazy
> danych. Kazda ma swoj wlasny system zabezpieczen?
W bazie aplikacyjnej to właściwie można się nawet bez constraintów obejść -
aplikacja może wszystkiego przypilnować. W przypadku bazy integracyjnej,
gdzie twoja aplikacja jest tylko gościem, nie jest już tak różowo. Tutaj
nie ma mowy o przesuwaniu tej odpowiedzialności na aplikację i umywania
rąk. Baza danych dostarcza aplikacji pewnego API w postaci kolekcji
obiektów dostępnych w ramach uprawnień użytkownika aplikacyjnego. I teraz
wiadomo, że aplikacja namiesza najwyżej tyle, ile jest na to pozwala
publiczne API. Korzystanie z wbudowanych mechanizmów nic nam tu nowego nie
daje, bo i tak tę logikę dostępu trzeba zrealizować, czy to w postaci kodu
programu, czy też wyszukanego setupu z pomocą narzędzi za setki tysięcy
dolarów (no, trochę przesadzam). A w samej aplikacji trzeba oczywiście i
tak jeszcze odrębnie zakodować reguły dostępu, bo przecież nie będziesz
udostepniał użytkownikowi końcowemu interfejsu do zrobienia wszystkiego i
tylko polegał na tym, że się baza z odpowiednim wyjątkiem wywali. Nie wiem
też jak wyglądają te super rozwinięte narzędzia do obsługi DBMS (nie miałem
styczności), ale czy np. przewidują tworzenie roli i grup użytkowników (to
widzę że tak) i czy takim grupom/rolom można przypisać uprawnienia do
odpowiednio drobno granulowanych danych? Czy można do nich dodawać rózne
metadane? A czy takie narzędzia pozwalają na tworzenie relacji między
użytkownikami i udostępnienie danych w kontekście danej relacji (co
ostatnio w projekcie w którym biorę udział dość mocno jest praktykowane)
Czy do wszystkiego tego da się dostać z poziomu aplikacji? To jest dość
chyba podstawowa funkcjonalność której używa się w aplikacjach. A co z
aplikacjami rozproszonymi, gdzie jednego użytkownika używa się do
autoryzacji wielu niezwiązanych czynności w potencjalnie różnych bazach
danych i nie ma ścisłego powiązania między daną bazą a użytkownikiem
końcowym aplikacji?
Ataki SQL injection też nie mają prawa bytu, jeżeli aplikacja korzysta
wyłącznie z dobrze zdefiniowanego interfejsu bazy danych. Jeżeli aplikacji
nie pozwalamy robić przelewów, to mamy gwarancję, że żaden jej użytkownik
przelewu nie wykona. I to już jest bardzo dobre zabezpieczenie.
I nie bardzo sobie wyobrażam, żeby np. dało się za pomocą takich narzędzi
opisać sytuację, w której to pełnomocnik klienta może wykonywać przelewy w
imieniu klienta, ale tylko z konta danego typu.
Wbudowanie zabezpieczeń w DBMS - jak najbardziej tak! Koniecznie wręcz w
przypadku większych baz, gdzie dana aplikacja jest tylko gościem. Tylko ja
co innego rozumiem pod pojęciem wbudowania zabezpieczeń w bazę, niż
korzystanie z użytkowników samego DBMSa. Tworzenie użytkownika
aplikacyjnego i wytawienie dobrze zdefiniowanego API w ramach tego
użytkownika daje nam klarowną granicę zaufania i jasny podział
odpowiedzialności. A tak część logiki jest w bazie, część tej samej logiki
w aplikacji, a cześć w konfiguracji samej bazy.
Ad 2. Jeżeli każda aplikacja ma dobrze określony sposób dostępu do danych
to problem nie występuje. Masz określone grono użytkowników, które coś z
danymi mogą w ogóle zrobić. Konkretnie użytkownik techniczny aplikacji oraz
administratorzy.
Ad 3. To jest bardzo ogólne pytanie. To wszystko zależy o jakich
aplikacjach mówimy i jaki jest cel istnienia danej hierarchi użytkowników.
Uprawnienia użytkowników mogą być też różne w różnym kontekście, a co za
tym idzie różne w różnych aplikacjach.
> Od tego DBMS maja na przyklad RBAC lub inne mechanizmy ulatwiajace
> zarzadzanie uprawnieniami i uzytkownikami (grupy itp). Niczym sie to nie
> rozni od zabezpieczania dostepu do danych na dyskach sieciowych (w koncu
> system plikow to taki DBMS).
Czyli nie ten poziom granulacji.
>> W opisanym przeze mnie typowym przypadku
>> uprawnienia użytkowników aplikacji są odseparowane od uprawnień samej
>> aplikacji a co za tym idzie łatwiej jest postawić wyraźną granicę, co
>> aplikacji wolno a czego jej nie wolno.
>>
>
> Ale jak zapewnic separacje uprawnien uzytkownikow w ramach aplikacji majacej
> (z powodu wymagan funkcjonalnych) dostep do zbioru danych bedacego
> nadzbiorem danych dostepnych kazdemu uzytkownikowi tejze aplikacji? To tylko
> przesuniecie problemu i - poprzez wprowadzenie kolejnego mechanizmu
> zabezpieczen - niepotrzebna komplikacja systemu.
Nie bardzo rozumiem, co chciałeś przez to powiedzieć.
A poziomów zabezpieczeń powinno być conajmniej tyle ile granic zaufania w
całej aplikacji.
Zresztą cała ta nasza dyskusja jest niestety zawieszona w powietrzu. Co
innego jest w przypadku bazy aplikacyjnej, a co innego w przypadku bazy
integracyjnej. Co innego w przypadku aplikacji korporacyjnej a co innego w
przypadku aplikacji dla masowego użytkownika. Z tego wątku tu już chyba nic
nie będzie :]
--
Pozdrawiam
Zbyszek Malec
Następne wpisy z tego wątku
- 29.06.11 20:07 Marek Borowski
- 29.06.11 20:46 Kuba Radlinski
- 29.06.11 23:32 Marcin Biegan
- 30.06.11 07:22 Stachu 'Dozzie' K.
- 30.06.11 07:26 Stachu 'Dozzie' K.
- 07.07.11 18:37 Marek Borowski
Najnowsze wątki z tej grupy
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-12-16 W telefonie brak szufladki na drugą kartę SIM
- 2024-12-16 Szukam monitora HDMI ok. 4"
- 2024-12-16 Poznań => Key Account Manager <=
- 2024-12-16 Akwarium w aucie
- 2024-12-16 Warszawa => Account Manager - Usługi rekrutacyjne <=
- 2024-12-16 Warszawa => Expert Recruiter 360 <=
- 2024-12-16 Gdańsk => System Architect (background deweloperski w Java) <=
- 2024-12-16 Warszawa => Key Account Manager <=
- 2024-12-16 Warszawa => Spedytor Międzynarodowy <=
- 2024-12-16 Białystok => Analityk w dziale Trade Development (doświadczenie z Po
- 2024-12-16 Warszawa => Programista Microsoft Dynamics 365 Business Central <=
- 2024-12-16 Wrocław => Konsultant wdrożeniowy Comarch XL/Optima (Księgowość i
- 2024-12-16 Szczecin => Key Account Manager (ERP) <=
- 2024-12-16 Lublin => Inżynier Serwisu Sprzętu Medycznego <=
- 2024-12-16 Gdańsk => Specjalista ds. Sprzedaży <=