Są na to inne sposoby. Zależy to od tego, kto Twoim zdaniem nadchodzi po Twoim połączeniu i jakiego rodzaju dostęp i poziom umiejętności będą mieli. Ciąg połączenia jest gdzieś tam, bez względu na to, jak próbujesz go ukryć.
Wiedząc, że ciąg połączenia może zostać zhakowany, zawsze zakładam, że zostanie on zhakowany i podejmuję środki ostrożności po drugiej stronie.
Robimy kilka rzeczy na końcu serwera DB, aby upewnić się, że nawet jeśli ciąg połączenia jest skompresowany, dane są nadal bezpieczne.
- Użytkownik powiązany z ciągiem połączenia ma praktycznie zerowe uprawnienia na serwerze. Jedyne uprawnienia, jakie mają, to WYKONANIE i KONTROLA na SCHEMACIE, który zawiera procedury składowane.
- Jedyny dostęp, jaki ma fronton, to procedury składowane. Nigdy nie pozwalamy front-endowi na wysyłanie ciągów SQL.
- Dane są przechowywane w oddzielnym schemacie niż pliki wykonywalne, w schemacie DATA użytkownik powiązany z ciągiem połączenia ma ZERO uprawnień, nie może na nie patrzeć, powąchać ani dotykać.
- Procedury składowane delegują uprawnienia użytkownikowi bez logowania, który ma wystarczające uprawnienia do wykonania procedury. (Z WYKONAJ JAKO „Użytkownik bez logowania”)
To wszystko, co możemy zrobić. Nie znaleźliśmy sposobu, aby zapobiec gdzieś ujawnieniu ciągu połączenia.
W odpowiedzi na pytanie, które Alex zadał poniżej. (za długo na komentarz)
Notatka. Poniższe informacje dotyczą MS SQL Server, może dotyczyć innych systemów DBMS, ale nie mogę ręczyć za inne.
Baza danych zawiera schemat, schemat zawiera obiekty bazy danych, takie jak tabele, widoki, procedury składowane. Schmea pozwala odgrodzić obiekty bazy danych, na przykład, jeśli masz grupę tabel, które każdy może zobaczyć, to mogliby to zrobić w schemacie COMMON, jeśli masz informacje o płacach, które musisz zabezpieczyć, możesz umieścić to do schematu PAYROLL. Następnie na SCHEMACIE można zastosować różne środki bezpieczeństwa w zależności od rodzaju obiektów, które się w nim znajdują. Graficznie wyglądają jak foldery na dysku twardym, a pod nimi znajdują się wszystkie obiekty bazy danych, które zawierają. Po uruchomieniu serwera automatycznie tworzonych jest kilka schematów. Ten, który najlepiej znasz, to schmea DBO. Możesz nie być tego świadomy, jeśli administrator ustawił go jako domyślny schemat.
To, co robimy, to umieszczanie wszystkich danych w schemacie DATA, co oznacza, że dozwolone są tylko tabele. Więc gdybyśmy mieli bazę danych płac, tabele danych zostałyby umieszczone w schemacie o nazwie dataPayroll.
Procedura składowana to blok lub bloki kodu SQL, które serwer bazy danych może uruchomić po wywołaniu. Może zwrócić tabelę danych lub pojedynczą wartość. Pomyśl o tym jako o metodzie w C#.
Procedury składowane mają parametry wejściowe i zwracane, które są używane w kodzie SQL. Paramataryzowane procedury przechowywane stanowią silną ochronę przed atakami typu SQL Injection.
Nasz protokół mówi, że wszystkie procedury składowane i widoki są przechowywane w schemacie poprzedzonym słowem „prog”. Tak więc w przypadku bazy danych płac wszystkie obiekty, które nie są danymi, znajdują się w schemacie progPayroll.
Użytkownik, który jest zdefiniowany przez ciąg połączenia, ma wtedy tylko uprawnienia Control i Execute w schemacie „prog”. Pozwala im to na wywołanie procedury składowanej. Użytkownik, który jest zdefiniowany przez ciąg połączenia, nie ma żadnych innych uprawnień. Ten użytkownik nie ma również WSZYSTKICH uprawnień wszędzie indziej. W procedurze przechowywanej uprawnienia dostępu do danych są delegowane na użytkownika NO LOGIN, który ma uprawnienia do pobierania danych ze schematu „dane” za pomocą polecenia EXECUTE AS.
Z przodu NIE ma sql. Wszyscy programiści front-end wiedzą, jaka jest nazwa procedur składowanych, parametry oraz typy i wartości zwracane.
W ten sposób, nawet jeśli atakującemu uda się wydobyć ciąg połączenia z twojego programu, nadal ma dużo pracy do wykonania, aby móc zrobić cokolwiek z twoją bazą danych, ponieważ użytkownik, którego ma, może wykonać tylko procedurę przechowywaną.
Jeśli nie masz pojęcia, co to jest, to naprawdę potrzebujesz programisty DB, który skonfiguruje twój system za ciebie.