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:
|
1 2 |
sudo apt-get update sudo apt-get install postgresql postgresql-contrib |
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:
|
1 |
sudo su - postgres |
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:
|
1 |
psql |
Następnie uruchom poniższe polecenie, aby wyświetlić role:
|
1 |
\du |

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:
|
1 |
CREATE ROLE demo_role; |
Aby sprawdzić, czy została utworzona, uruchom polecenie:
|
1 |
\du |

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:
|
1 |
\q |
Możesz utworzyć rolę o nazwie “test” za pomocą następującego polecenia:
|
1 |
createuser test |
Po wykonaniu powyższego polecenia zaloguj się do psql i wyświetl listę ról za pomocą następujących poleceń:
|
1 2 |
psql \du |

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:
|
1 |
DROP ROLE role_name; |
Możesz usunąć utworzoną wcześniej rolę demonstracyjną za pomocą polecenia:
|
1 |
DROP ROLE demo_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ę:
|
1 |
DROP ROLE demo_role; |

Jeśli chcesz, aby polecenie nie zgłaszało błędu, gdy rola nie istnieje, możesz dodać do polecenia ‘IF EXISTS’:
|
1 |
DROP ROLE IF EXISTS role_name; |
Możesz spróbować ponownie usunąć rolę za pomocą tego polecenia:
|
1 |
DROP ROLE IF EXISTS demo_role; |
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:
|
1 |
CREATE ROLE role_name WITH optional_permissions; |
Aby zobaczyć dostępne opcje, możesz otworzyć pomoc za pomocą tego polecenia:
|
1 |
\h CREATE ROLE |

Jeśli chcesz utworzyć rolę z uprawnieniami do logowania, możesz sformułować polecenie w ten sposób:
|
1 |
CREATE ROLE demo_role WITH LOGIN; |

Jak widzieliśmy wcześniej, jeśli chcesz utworzyć role z uprawnieniem do logowania, możesz również użyć następującego polecenia:
|
1 |
CREATE USER role_name; |
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:
|
1 |
ALTER ROLE role_name WITH attribute_options; |
Na przykład, jeśli chcesz, możesz zmienić uprawnienia do logowania dla demo_role na ‘log in’ za pomocą tego polecenia:
|
1 |
ALTER ROLE demo_role WITH NOLOGIN; |

Aby ponownie umożliwić użytkownikowi logowanie, możesz zmienić uprawnienia za pomocą następującego polecenia:
|
1 |
ALTER ROLE demo_role WITH LOGIN; |
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:
|
1 |
\password test |
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:
|
1 2 |
\q exit |
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:
|
1 |
psql -U <span class="highlight">user</span> -d <span class="highlight">db</span> -h 127.0.0.1 -W |
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:
|
1 |
psql -U test -d postgres -h 127.0.0.1 -W |

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:
|
1 2 3 |
\q sudo su - postgres psql |
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:
|
1 |
GRANT permission_type ON table_name TO role_name; |
Możesz utworzyć prostą tabelę, aby wykonać polecenie:
|
1 2 3 4 |
CREATE TABLE demo ( name varchar(25), id serial, start_date date); |
Aby zobaczyć utworzoną tabelę, uruchom polecenie:
|
1 |
\d |

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:
|
1 |
GRANT UPDATE ON demo TO demo_role; |
Możesz nadać wszystkie uprawnienia roli, określając uprawnienie jako ‘ALL’:
|
1 |
GRANT ALL ON demo TO demo_role; |
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:
|
1 |
GRANT INSERT ON demo TO PUBLIC; |
Możesz wyświetlić wszystkie nadane uprawnienia za pomocą następującego polecenia:
|
1 |
\z |
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:
|
1 |
REVOKE permission_type ON table_name FROM user_name; |
Podobnie jak w przypadku GRANT, możemy użyć słów kluczowych – ‘ALL’ i ‘PUBLIC’, aby nadać wszystkie uprawnienia lub nadać uprawnienia wszystkim rolom:
|
1 |
REVOKE INSERT ON demo FROM PUBLIC; |
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’:
|
1 2 3 |
CREATE ROLE temporary_role; GRANT temporary_role TO demo_role; GRANT temporary_role TO 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:
|
1 |
\du |

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:
|
1 |
SET ROLE temporary_role; |
Wszystkie tabele, które teraz utworzysz, będą własnością temporary_role:
|
1 2 3 4 |
CREATE TABLE hello ( name varchar(25), id serial, start_date date); |
Aby sprawdzić właścicieli tabeli, uruchom następujące polecenie:
|
1 |
\d |

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:
|
1 |
RESET ROLE; |
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’:
|
1 |
ALTER ROLE test_user INHERIT; |
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’:
|
1 |
DROP ROLE temporary_users; |

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ę:
|
1 |
ALTER TABLE hello OWNER TO demo_role; |
Możesz sprawdzić, czy temporary_role nie jest teraz właścicielem żadnych tabel, za pomocą następującego polecenia:
|
1 |
\d |

Możesz teraz usunąć ‘temporary_role’, ponieważ nie ma już żadnych zależności:
|
1 |
DROP ROLE temporary_users; |
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!


Komentarze
Brak komentarzy. Bądź pierwszy.