Wyzwanie polega na tym, że dostępem do bazy danych zarządza abstrakcja. Zamiast użytkowników łączących się jak oni, w zasadzie przyjmują tożsamość jakiejś uogólnionej roli aplikacji. Nie tylko tracisz widoczność poszczególnych połączeń, ale także tracisz szczegółowość definiowania różnych rodzajów dostępu dla wszystkich indywidualnych użytkowników.
Głównym powodem zastosowania tego podejścia jest prostota. Wiele aplikacji zaprojektowano tak, aby użytkownik aplikacji nie miał wiedzy o bazie danych. Naprawdę tego nie potrzebują, zwłaszcza jeśli aplikacja zarządza własnym bezpieczeństwem wewnętrznym. Większość indywidualnych użytkowników nigdy nie łączy się bezpośrednio z bazą danych, więc zdefiniowanie dla nich jawnego loginu nie jest konieczne.
Jedynym momentem, w którym powinieneś rozważyć umożliwienie bazie danych zarządzania bezpieczeństwem, jest to, że masz użytkowników, którzy będą się łączyć bezpośrednio z bazą danych. Oznacza to, że omijają twoją aplikację i nie mogą już same egzekwować bezpieczeństwa. Zaletą jest to, że możesz bardziej szczegółowo określić swoje bezpieczeństwo. Wadą jest wyższy koszt zarządzania użytkownikami i ich uprawnieniami.
Jeśli czujesz potrzebę tego rodzaju dostępu, chcesz użyć kontroli dostępu opartej na rolach . Należy zdefiniować role na podstawie tego, jakie uprawnienia są potrzebne w bazie danych, a następnie pogrupować poszczególnych użytkowników w ramach tych ról. Zapewnia to lepszą kontrolę i kontrolę nad modelem bezpieczeństwa, który może szybko wymknąć się spod kontroli podczas zarządzania bezpośrednim dostępem.
Istnieje hybrydowe podejście do tego. Jeśli chcesz, aby twoje zabezpieczenia były częściowo modyfikowane przez bazę danych, możesz utworzyć wielu użytkowników aplikacji, z których każdy jest zdefiniowany według ich roli, i wyraźnie przyznać dostęp tym użytkownikom na podstawie roli, którą pełnią. Oznacza to, że możesz wykorzystać silnik bazy danych do niektórych modeli bezpieczeństwa, ale nadal musisz mieć pewne zarządzanie w aplikacji. Zwiększa złożoność modelu użytkownika aplikacji, ale zapewnia większą szczegółowość różnych używanych loginów.