Postgres Security Definer

Postgres Security Definer
W tej zaawansowanej i zautomatyzowanej ery komputerów i technologii wszyscy chcą być zabezpieczeni wraz z danymi osobowymi. To samo dotyczy, bazy danych są wykorzystywane do przechowywania informacji dotyczących wielu rzeczy, w tym danych osobowych o ludziach. Ze względu na wiele informacji musimy również zadbać o bezpieczeństwo bazy danych, aby nie pozwolić nikomu z tego niewłaściwie korzystać. W bazie danych PostgreSQL musimy użyć wielu wbudowanych baz danych, aby pobrać niektóre rekordy z tabel i bazy danych. Podobnie jak wiele z tych funkcji, jedna jest funkcja definiatora bezpieczeństwa. Jak sugeruje tytuł, musi to być coś związanego z zdefiniowaniem bezpieczeństwa bazy danych PostgreSQL. Ponieważ ta koncepcja jest unikalna, złożona i nowa dla większości użytkowników PostgreSQL, postanowiliśmy omówić ją w zupełnie nowym artykule. Więc miejmy trochę wiedzy na temat właściwości Metody definiującej bezpieczeństwo.

Definiator bezpieczeństwa vs bezpieczeństwo

Termin definiatora zabezpieczeń odnosił się do niektórych wyjątkowych funkcji używanych do wykonywania unikalnych i uprzywilejowanych zadań dotyczących bezpieczeństwa bazy danych w PostgreSQL. Te zadania są tak oficjalne i uprzywilejowane, że nie każdy użytkownik może je wykonać lub używać, jeśli jest to bezpieczne i dźwiękowe. Można to wykorzystać jako właściwość w zapytaniu PostgreSQL podczas wykonywania niektórych transakcji z bazy danych PostgreSQL. Kiedy funkcja została wywołana z uprawnieniami użytkownika, który nazywa tę funkcję, mówi się, że jest właściwością bezpieczeństwa funkcji. Z drugiej strony, gdy funkcja została wywołana prawami jego prawdziwego właściciela (który stworzył tę funkcję), mówi się, że jest to właściwość definiującej bezpieczeństwo funkcji.

Kto może go użyć?

Przez większość czasu funkcję definiatora bezpieczeństwa można wykonać z prawami jego właściciela I.mi., Właściciel funkcji definiatora bezpieczeństwa będzie jedynym używającym jej w części wykonania. Z drugiej strony, normalne wbudowane lub zdefiniowane przez użytkownika funkcje mogą być wykonywane przez każdego użytkownika I.mi., publiczne, jeśli nie są określone jako definiki bezpieczeństwa. Ponieważ baza danych PostgreSQL zawsze zgadza się na korzystanie z baz danych i tabel systemowych przez lokalnych i zdalnych pracodawców PostgreSQL, zastosowanie to może wpłynąć na wykonywanie funkcji definiatora bezpieczeństwa, a także szkodzi bezpieczeństwu bazy danych. Istnieje możliwość, że użytkownik zewnętrzny może mieć możliwość zarządzania lub kontrolowania całej bazy danych PostgreSQL i jej tabel, dodanie uszkodzonych danych w bazie danych przy użyciu tych samych praw, co właściciel funkcji definiatora zabezpieczeń. W ten sposób użytkownik outsidera może wykonywać zapytania i kody, których nie powinien być. Korzystając z tej właściwości w zapytaniu PostgreSQL, pozwalamy użytkownikom wykonywać funkcje przeprowadzone z prawami użytkownika, który ją utworzył i nie będzie korzystał z praw użytkownika, który nazywał to. Dlatego musimy być bardziej ostrożni niż wcześniej, korzystając z bazy danych po użyciu definiatora bezpieczeństwa. Spójrzmy teraz na kilka przykładów.

Przykład 01

Rzućmy okiem na prosty przykład, aby wygenerować funkcję z właściwością definiatora bezpieczeństwa. Postaramy się, aby nasza funkcja była jak najbardziej bezpieczna. Zaczęliśmy więc od logowania w narzędzia PGADMIN GUI bazy danych PostgreSQL. Zobacz kartę „Funkcje” w określonej bazie danych. Kliknij prawym przyciskiem myszy, najedź na opcję „Utwórz” i wybierz „Funkcja”.

Ekran o nazwie Freate-Funkcja zostanie otwarta. Dodaj nazwę funkcji jako „nieszkodliwej”, wybierz jej właściciela i schemat. Ponieważ ta funkcja będzie definiją bezpieczeństwa, zostanie wykonana tylko przez prawa użytkownika „aqsayasin”.

Z sekcji definicji dodaj typ powrotu, język i dodaj typ danych argumentu, który ma być podany w funkcji.

W obszarze kodu napisz prosty kod. Jak widać, nie używamy tutaj żadnej tabeli, więc wydaje się, że jest nieszablicy, jeśli chodzi o jego wykonanie.

W obszarze opcji włącz „Bezpieczeństwo definiatora”, aby umożliwić właściwość definiatora bezpieczeństwa.

W sekcji SQL otrzymasz całe zapytanie do utworzenia nowej funkcji z właściwością Security Definier. Właścicielem tej funkcji będzie użytkownik „aqsayasin”.

Po uruchomieniu instrukcji Wybierz, aby wywołać nieszkodliwą funkcję przekazującą 15 jako wartość, mamy wartość 25 jako wyjście. Chociaż wygląda na bezpieczne i dźwiękowe, użycie schematu publicznego pozwoli zewnętrznym załącznikom/użytkownikom tworzyć nowe obiekty i mieć dostęp do tej funkcji.

Aby uzyskać informacje dotyczące nowo utworzonej funkcji definiatora bezpieczeństwa „nieszkodliwa”, musimy użyć wybierz instrukcji pokazanej poniżej w obszarze zapytania PGADMIN 4. Kolumna „proname” pokazuje nazwę funkcji i.mi., nieszkodliwa, „nazwa nspname” pokazuje nazwę schematu i.mi., publiczna, a kolumna „USNAME” należy do właściciela dla tej funkcji i.mi., „Aqsayasin”. W ten sposób otrzymujemy informacje dotyczące funkcji definiatora bezpieczeństwa.

Przykład 02

Do utworzenia procedury przez konkretnego użytkownika może również użyć funkcji definiatora bezpieczeństwa. Utwórzmy nową procedurę „sec_def” przy użyciu właściwości definiatora zabezpieczeń w IT. Ta procedura służy do uzyskania wartości z tabeli „ftest” z schematem „publicznym”. Musisz wiedzieć, że tabela „ftest” została zapisana w bazie danych „aqsayasin”, a jego właścicielem jest użytkownik „aqsayasin”.

Teraz musisz zalogować się z terminala powłoki PostgreSQL, aby dodać kilka prostych poleceń. Tak więc najpierw zalogowaliśmy się z bazy danych „aqsayasin”. Następnie próbowaliśmy podłączyć bazę danych „aqsayasin” z użytkownikiem „outsider” za pomocą polecenia „\ c” wraz z nazwą bazy danych i użytkownikiem do podłączenia. Użytkownik użytkownika „Outsider” jest podłączony do bazy danych „AQSAYASIN”.

Teraz nadszedł czas, aby wywołać procedurę „sec_def ()” za pomocą funkcji wbudowanej call () w terminalu. Wyświetli wyjątek pokazujący, że „opinia publiczna.Ftest ”nie istnieje dla naszego osoby z zewnątrz użytkownika. Wynika to z faktu, że procedura została utworzona z prawami użytkownika „aqsayasin”, a użytkownik „outsider” nie ma takich praw.

Jeśli chcesz uniknąć awarii z zewnątrz i niezaufanych użytkowników bazy danych PostgreSQL w systemie, być może będziesz musiał ograniczyć lub zakazać praw „pisania” dla tych użytkowników do wstawienia rekordów w bazie danych w parametrze „Search_path”. Korzystając z w ten sposób, zewnętrzni użytkownicy nie będą mogli generować nieprawidłowych obiektów, aby manipulować systemem bazy danych, jego danych i praw. Możesz użyć tymczasowego schematu „PG_TEMP” w ostatnim przeszukaniu w celu wykonania bezpiecznego zarządzania w „Search_path” w zapytaniu.

Wniosek

Zastosowanie właściwości definiatora bezpieczeństwa w funkcjach do wykonania specjalnego zadania jest dość silną techniką, ale bardzo ryzykowną. Aby pozwolić naszym użytkownikom zrozumieć koncepcję definiatora bezpieczeństwa, próbowaliśmy utworzyć funkcję i procedurę posiadającą funkcję definiatora bezpieczeństwa jako właściwość. Widzieliśmy, jak występuje błąd, gdy użytkownik bez „definiatora bezpieczeństwa” prawa właściciela próbuje wywołać funkcję lub procedurę. Podsumowując, zwykle wolimy go nie używać w bazie danych, ponieważ może być niezbawione dla bazy danych PostgreSQL.