Powrót do bloga

Jak używać ról i zarządzać uprawnieniami w PostgreSQL

Jak używać ról i zarządzać uprawnieniami w PostgreSQL

PostgreSQL to otwartoźródłowy system DBMS, który z kolei korzysta z SQL. To bardzo potężne narzędzie, które jest używane do zarządzania aplikacjami i hostowania danych internetowych na VPS. W tym samouczku dowiesz się, jak zarządzać uprawnieniami w PostgreSQL. Pomoże Ci to zapewnić rolom aplikacji wymagane uprawnienia. Ten samouczek przeprowadzimy przy użyciu PostgreSQL na Ubuntu 18.04 serwerze chmurowym w CloudSigma.

Instalacja PostgreSQL

Aby pobrać i zainstalować PostgreSQL, uruchom następujące polecenia:

Instalator utworzy domyślnego użytkownika – “Postgres”, w ramach którego będą wykonywane operacje. Będziemy używać tego użytkownika przez większość tego samouczka. Możesz zalogować się na tego użytkownika za pomocą tego polecenia:

Po zainstalowaniu PostgreSQL dowiesz się, jak obsługuje on uprawnienia. Możesz również skorzystać z naszego samouczka dotyczącego konfiguracji PostgreSQL na Ubuntu w celu uzyskania szczegółowego przewodnika krok po kroku po procesie instalacji.

Koncepcje uprawnień w PostgreSQL

Postgres zarządza uprawnieniami poprzez koncepcję “ról”. W przypadku ról nie ma rozróżnienia między użytkownikami a grupami. Role są bardziej elastyczne niż tradycyjny system użytkowników i grup w systemie Unix. Na przykład rola może działać jako członek innej roli, dziedzicząc jej uprawnienia.

Wyświetlanie ról w PostgreSQL

Aby wyświetlić role w PostgreSQL, musisz najpierw zalogować się do wiersza poleceń za pomocą następującego polecenia:

Następnie uruchom poniższe polecenie, aby wyświetlić role:

show roles manage permissions in PostgreSQL

Na ten moment istnieje tylko jedna domyślna rola ze wszystkimi uprawnieniami.

Jak tworzyć role w PostgreSQL

Możesz tworzyć role dla Postgresa z poziomu wiersza poleceń lub z poziomu powłoki Postgresa. Możesz wypróbować dwa poniższe podejścia, po których zobaczysz, jak zarządzać uprawnieniami i dostępem w PostgreSQL.

Jak tworzyć role z poziomu PostgreSQL

Najprostszym sposobem na tworzenie ról jest zrobienie tego z poziomu wiersza poleceń Postgresa. Możesz to zrobić za pomocą następującego polecenia:

Aby sprawdzić, czy została utworzona, uruchom polecenie:

create role from prompt

Wskazuje to, że nowa rola nie ma uprawnień do logowania. Dowiesz się, jak to zmienić w dalszej części samouczka.

Jak tworzyć role z poziomu wiersza poleceń

Alternatywą dla powyższej metody jest utworzenie użytkownika z poziomu wiersza poleceń. Aby wyjść z wiersza poleceń PostgreSQL, wpisz:

Możesz utworzyć rolę o nazwie “test” za pomocą następującego polecenia:

Po wykonaniu powyższego polecenia zaloguj się do psql i wyświetl listę ról za pomocą następujących poleceń:

creating user from commandline

Możesz zauważyć, że użytkownik utworzony w ten sposób nie ma takich samych atrybutów.

Jak usuwać role w PostgreSQL

Możesz łatwo usunąć role w PostgreSQL, używając następującej składni:

Możesz usunąć utworzoną wcześniej rolę demonstracyjną za pomocą polecenia:

drop role

Jeśli spróbujemy usunąć rolę, która nie istnieje, zostanie zgłoszony błąd. Aby to zobaczyć, możesz spróbować ponownie usunąć tę samą rolę:

drop role fail

Jeśli chcesz, aby polecenie nie zgłaszało błędu, gdy rola nie istnieje, możesz dodać do polecenia ‘IF EXISTS’:

Możesz spróbować ponownie usunąć rolę za pomocą tego polecenia:

drop role if exists

Jak definiować uprawnienia podczas tworzenia roli

Do tej pory tworzyłeś i usuwałeś role. W tej sekcji utworzysz role ze zmienionymi uprawnieniami. Możesz to zrobić, określając uprawnienia dla roli za pomocą polecenia create:

Aby zobaczyć dostępne opcje, możesz otworzyć pomoc za pomocą tego polecenia:

help create user

Jeśli chcesz utworzyć rolę z uprawnieniami do logowania, możesz sformułować polecenie w ten sposób:

create role with login manage permissions in PostgreSQL

Jak widzieliśmy wcześniej, jeśli chcesz utworzyć role z uprawnieniem do logowania, możesz również użyć następującego polecenia:

Jedyną różnicą między tymi dwoma poleceniami jest to, że ‘CREATE USER’ domyślnie nadaje roli uprawnienie do logowania.

Jak zmienić uprawnienia ról w PostgreSQL

Do tej pory wypróbowałeś, jak nadawać uprawnienia podczas tworzenia użytkownika. W tej sekcji zmodyfikujesz uprawnienia już utworzonych użytkowników. Składnia polecenia alter to:

Na przykład, jeśli chcesz, możesz zmienić uprawnienia do logowania dla demo_role na ‘log in’ za pomocą tego polecenia:

alter nologin

Aby ponownie umożliwić użytkownikowi logowanie, możesz zmienić uprawnienia za pomocą następującego polecenia:

Jak zalogować się jako inny użytkownik w PostgreSQL

PostgreSQL domyślnie pozwala na logowanie tylko lokalnie, jeśli Twoja nazwa użytkownika zgadza się z nazwą użytkownika systemu. Aby to obejść, możesz zmienić typ logowania lub skonfigurować PostgreSQL do korzystania z sieciowego interfejsu pętli zwrotnej (loopback). Ten interfejs zmieni typ połączenia na zdalny, nawet jeśli połączenie jest lokalne.

W tej sekcji wypróbujesz drugą opcję. Na początek możesz ustawić hasło użytkownika, aby uwierzytelnianie było możliwe.

Ustaw hasło dla ‘demo_user’ za pomocą następującego polecenia:

Po wyświetleniu monitu wprowadź i potwierdź hasło. Po zakończeniu możesz wyjść z interfejsu PostgreSQL i powrócić do zwykłego użytkownika systemu:

PostgreSQL wymaga zalogowania się przy użyciu nazwy użytkownika, która odpowiada nazwie użytkownika w systemie operacyjnym, a także połączenia z bazą danych przy użyciu tej samej nazwy użytkownika. Ponieważ w tym przypadku tego nie robisz, będziesz musiał jawnie określić opcje, których chcesz użyć. Możesz użyć następującej składni:

user: Nazwa użytkownika, z którą chcesz się połączyć
DB: Istniejąca baza danych, do której masz dostęp
-h 127.0.0.1: Określa dla PostgreSQL, że będziesz łączyć się przez interfejs sieciowy z lokalną maszyną. Ta opcja umożliwia uwierzytelnienie, nawet jeśli nazwa użytkownika nie zgadza się z nazwą użytkownika w systemie.
-W: Wskazuje PostgreSQL, że wprowadzisz hasło

Aby zalogować się za pomocą naszego “test_user,” możemy wydać następujące polecenie:

postgresql login through network interface manage permissions in PostgreSQL

Po wprowadzeniu hasła zostaniesz zalogowany do powłoki. W naszym przykładzie używamy bazy danych ‘postgres’, domyślnej bazy danych automatycznie konfigurowanej podczas instalacji.

W tej sesji, w zależności od wybranego do zalogowania użytkownika, napotkasz problem polegający na braku odpowiednich uprawnień do wykonywania różnych czynności. Przyczyną tego problemu jest to, że nie nadałeś jeszcze użytkownikowi wystarczających uprawnień do administrowania.

W następnej sekcji nadasz użytkownikom wymagane uprawnienia. Najpierw musisz zmienić użytkownika z powrotem na administracyjnego:

Zarządzanie uprawnieniami w PostgreSQL: Jak nadawać uprawnienia w PostgreSQL

W PostgreSQL, jeśli baza danych lub tabela zostanie utworzona przez określoną rolę, tylko ta rola ma uprawnienia do jej modyfikacji. Wyjątkiem są role posiadające uprawnienia superużytkownika (superuser). W tej sekcji nadasz uprawnienia innym rolom. Możesz nadać uprawnienia innym rolom za pomocą instrukcji ‘GRANT’. Składnia to:

Możesz utworzyć prostą tabelę, aby wykonać polecenie:

Aby zobaczyć utworzoną tabelę, uruchom polecenie:

create table manage permissions in PostgreSQL

Skoro masz już tabelę demo, możesz nadać uprawnienia do tabeli ‘demo’ roli ‘demo_role.’ Możesz nadać tej roli uprawnienie ‘UPDATE’ za pomocą tego polecenia:

Możesz nadać wszystkie uprawnienia roli, określając uprawnienie jako ‘ALL’:

Jeśli chcesz nadać określone uprawnienie wszystkim rolom w systemie, możesz użyć słowa kluczowego ‘public’ zamiast nazwy roli, tak jak w poniższym poleceniu:

Możesz wyświetlić wszystkie nadane uprawnienia za pomocą następującego polecenia:

granted permissions

Zarządzanie uprawnieniami w PostgreSQL: Jak usunąć uprawnienia w PostgreSQL

Możesz łatwo odebrać uprawnienia roli za pomocą polecenia ‘REVOKE’. Jest ono bardzo podobne do polecenia grant:

Podobnie jak w przypadku GRANT, możemy użyć słów kluczowych – ‘ALL’ i ‘PUBLIC’, aby nadać wszystkie uprawnienia lub nadać uprawnienia wszystkim rolom:

Jak używać ról grupowych w PostgreSQL

Aby umożliwić szeroką kontrolę uprawnień, role są na tyle elastyczne, że pozwalają na grupowanie z innymi rolami. Na przykład możesz utworzyć rolę – ‘temporary_role’, a następnie dodać do niej ‘demo_role’ i ‘test_user’:

Teraz możesz zarządzać uprawnieniami tych dwóch ról, zarządzając po prostu uprawnieniami roli ‘temporary_role’. Pozwala to na łatwiejsze zarządzanie uprawnieniami. Informacje o przynależności do ról możesz zobaczyć za pomocą tego polecenia:

role - group manage permissions in PostgreSQL

Każdy członek grupy może działać jako grupa, używając polecenia ‘set role’. Ponieważ użytkownik ‘postgres’ jest superużytkownikiem, możesz użyć ‘set role’, nawet jeśli nie jesteś członkiem grupy:

Wszystkie tabele, które teraz utworzysz, będą własnością temporary_role:

Aby sprawdzić właścicieli tabeli, uruchom następujące polecenie:

create table with temporary_role

Możesz zobaczyć, że rola ‘temporary_role’ jest właścicielem nowej tabeli oraz sekwencji powiązanej z typem danych serial. Aby powrócić do pierwotnych uprawnień roli, uruchom następujące polecenie:

Jeśli chcesz, aby rola posiadała wszystkie uprawnienia roli, do której należy, możesz określić właściwość ‘inherit’ za pomocą polecenia ‘alter role’:

Dzięki powyższemu poleceniu ‘test_user’ otrzymał wszystkie uprawnienia ról, do których należy. Aby usunąć rolę, możesz użyć polecenia ‘drop role’:

drop role manage permissions in PostgreSQL

Powyższe polecenie zgłasza błąd, ponieważ istnieją obiekty, takie jak tabela ‘hello’, które od niego zależą. Aby je usunąć, możesz przenieść własność tabeli na inną rolę:

Możesz sprawdzić, czy temporary_role nie jest teraz właścicielem żadnych tabel, za pomocą następującego polecenia:

check ownerships

Możesz teraz usunąć ‘temporary_role’, ponieważ nie ma już żadnych zależności:

Chociaż powyższe polecenie usunie rolę temporary_users, dawni członkowie tej grupy ról nie zostaną usunięci.

Podsumowanie

Ukończyłeś samouczek i teraz wiesz, jak zarządzać uprawnieniami w PostgreSQL. Możesz łatwo administrować uprawnieniami. Wiedza o tym, jak zarządzać uprawnieniami, zapewnia, że Twoje aplikacje mają dostęp do wymaganych baz danych, nie mając jednocześnie dostępu do żadnej innej bazy danych używanej przez inną aplikację.

Miłego korzystania z komputera!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev jest projektantem kreatywnym w CloudSigma, skupiającym się na spójnej tożsamości biznesowej przy wykorzystaniu tradycyjnych i innowacyjnych kanałów marketingowych. Biegle łączy wizję artystyczną ze strategicznym marketingiem, tworząc wywierające wpływ narracje marki.

Komentarze

Brak komentarzy. Bądź pierwszy.