Użytkownicy i uprawnienia: CREATE USER, GRANT, REVOKE, konto jako nazwa i host

INF.03 · teoria
autor: redakcja · 02.11.2026
Tworzenie kont MySQL i MariaDB, znaczenie nazwy i hosta oraz przydzielanie i odbieranie dostępu do bazy. Sprawdzenie uprawnień i konfiguracja pracy wielu użytkowników. Lekcja 9.1 kursu INF.03.
Konto bazy danych to toż­sa­mość, którą serwer roz­po­zna­je przy po­łą­cze­niu i której przy­dzie­la okre­ślo­ne upraw­nie­nia. Na eg­za­mi­nie trzeba utwo­rzyć użyt­kow­ni­ka, nadać dostęp i roz­po­znać zakres po­le­ce­nia GRANT. W apli­ka­cji konto bazy jest uży­wa­ne przez skrypt PHP i nie musi od­po­wia­dać po­je­dyn­cze­mu klien­to­wi sklepu.

Nazwa i host tworzą konto

W MySQL konto opi­su­je para: nazwa użyt­kow­ni­ka oraz host, czyli miej­sce, z któ­re­go może po­cho­dzić po­łą­cze­nie. Konto o nazwie raport z hosta lo­cal­host jest inne niż konto raport z kon­kret­ne­go zdal­ne­go kom­pu­te­ra. Te konta mogą mieć różne hasła i upraw­nie­nia. Host nie ozna­cza nazwy bazy ani ser­we­ra, do któ­re­go wła­śnie się łą­czy­my; opi­su­je źródło po­łą­cze­nia klien­ta.
Obie części za­pi­su­je się od­dziel­nie, w apo­stro­fach. Symbol łą­czą­cy je to znak @. Przy­kła­dy po­sta­ci konta są na­stę­pu­ją­ce:
1
2
'raport'@'localhost'
'raport'@'192.0.2.20'
Pierw­szy przy­kład do­ty­czy klien­ta lo­kal­ne­go, drugi wska­za­ne­go hosta. Adres 192.0.2.20 jest tu ad­re­sem do­ku­men­ta­cyj­nym, a nie rze­czy­wi­stym kom­pu­te­rem do pod­łą­cze­nia. Nie za­kła­daj, że lo­cal­host oraz 127.0.0.1 w kon­fi­gu­ra­cji każ­de­go klien­ta pro­wa­dzą do iden­tycz­ne­go spo­so­bu po­łą­cze­nia i wyboru konta. Metoda po­łą­cze­nia oraz reguły do­pa­so­wa­nia mają zna­cze­nie. Zapis kont opi­su­je do­ku­men­ta­cja MySQL.
Konto sys­te­mu ope­ra­cyj­ne­go, konto bazy i użyt­kow­nik apli­ka­cji to od­ręb­ne po­zio­my. Klient sklepu może lo­go­wać się ad­re­sem e-mail, ale jego żą­da­nia serwer ob­słu­ży jednym tech­nicz­nym kontem bazy. Utwo­rze­nie klien­ta w tabeli nie tworzy au­to­ma­tycz­nie konta MySQL. Ana­lo­gicz­nie utwo­rze­nie konta MySQL nie dodaje osoby do tabeli klien­tów.

Utwo­rze­nie użyt­kow­ni­ka

CREATE USER (UTWÓRZ UŻYTKOWNIKA) tworzy konto. Frag­ment IDENTIFIED BY okre­śla hasło uży­wa­ne przy uwie­rzy­tel­nie­niu. Po­le­ce­nie wy­ko­nu­je ad­mi­ni­stra­tor mający od­po­wied­nie upraw­nie­nia, a nie do­wol­ne konto apli­ka­cji. Po­niż­sze hasło jest wy­łącz­nie przy­kła­dem skład­ni i nie po­win­no zostać użyte na rze­czy­wi­stym ser­we­rze.
1
2
CREATE USER 'raport'@'localhost'
IDENTIFIED BY 'Przyklad-Tylko-Do-Cwiczen!47';
Utwo­rzo­ne konto nie otrzy­mu­je przez to prawa czy­ta­nia tabel sklepu. Od­dzie­le­nie two­rze­nia konta od nada­wa­nia do­stę­pu po­zwa­la usta­lić zakres w ko­lej­nym kroku. W MySQL 8 nie używa się GRANT jako za­stęp­stwa CREATE USER. Star­sze przy­kła­dy łą­czą­ce te ope­ra­cje nie są wła­ści­wym wzor­cem do nowych ćwi­czeń.
Hasło nie po­win­no tra­fiać do pu­blicz­ne­go re­po­zy­to­rium, zrzutu od­da­wa­ne­go bez po­trze­by ani wia­do­mo­ści wy­sy­ła­nej wszyst­kim człon­kom ze­spo­łu. Kon­fi­gu­ra­cję po­łą­cze­nia udo­stęp­nia się tylko osobom i pro­ce­som, które jej po­trze­bu­ją. Konto root ma sze­ro­kie upraw­nie­nia ad­mi­ni­stra­cyj­ne, dla­te­go wygoda lo­kal­ne­go ćwi­cze­nia z takim kontem nie jest dobrym wzor­cem kon­fi­gu­ra­cji pu­blicz­nej apli­ka­cji.

GRANT okre­śla czyn­ność i zakres

GRANT (NADAJ) wska­zu­je do­zwo­lo­ne ope­ra­cje, obiek­ty i konto od­bior­cy. SELECT po­zwa­la od­czy­ty­wać dane, INSERT do­pi­sy­wać re­kor­dy, UPDATE zmie­niać, a DELETE usuwać. CREATE, ALTER i DROP do­ty­czą two­rze­nia, zmiany i usu­wa­nia obiek­tów. Same nazwy po­le­ceń danych są opi­sa­ne w dziale SQL; tutaj de­cy­du­je­my, kto może je wy­ko­nać.
1
2
3
GRANT SELECT ON sklep.* TO 'raport'@'localhost';
GRANT SELECT, INSERT ON sklep.zamowienie
TO 'formularz'@'localhost';
Pierw­sza in­struk­cja po­zwa­la ist­nie­ją­ce­mu kontu raport czytać tabele bazy sklep. Druga jest osob­nym przy­kła­dem dla wcze­śniej utwo­rzo­ne­go konta for­mu­larz: może czytać i do­pi­sy­wać w tabeli za­mo­wie­nie. Gwiazd­ka po nazwie bazy roz­sze­rza zakres na jej obiek­ty; brak gwiazd­ki ogra­ni­cza go do po­da­nej tabeli. Te in­struk­cje za­kła­da­ją, że wska­za­ne konta i baza już ist­nie­ją.
Zakres glo­bal­ny za­pi­su­je się jako dwie gwiazd­ki roz­dzie­lo­ne kropką. Zakres bazy to nazwa bazy i gwiazd­ka, a zakres tabeli nazwa bazy i nazwa tabeli. Roz­róż­nie­nie jest waż­niej­sze od dłu­go­ści listy ope­ra­cji. Jedno prawo SELECT dla wszyst­kich baz może ujaw­niać więcej niż kilka praw do jednej tabeli. Dobór za­kre­su opi­su­je in­struk­cja GRANT.
ALL PRIVILEGES (WSZYSTKIE UPRAWNIENIA) obej­mu­je upraw­nie­nia moż­li­we do nada­nia na wska­za­nym po­zio­mie. Nie znaczy au­to­ma­tycz­nie wszyst­kich praw na całym ser­we­rze. WITH GRANT OPTION do­dat­ko­wo po­zwa­la prze­ka­zy­wać po­sia­da­ne prawa w danym za­kre­sie. Konto do wy­świe­tla­nia ra­por­tów zwykle nie po­trze­bu­je ani za­rzą­dza­nia struk­tu­rą, ani nada­wa­nia praw innym. Zasada naj­mniej­szych upraw­nień ogra­ni­cza skutki błędu apli­ka­cji.

Ode­bra­nie i spraw­dze­nie do­stę­pu

REVOKE (ODBIERZ) cofa nadane upraw­nie­nie, ale nie usuwa konta ani danych. W ty­po­wym ćwi­cze­niu należy wska­zać ten sam poziom obiek­tu, na którym prawo zo­sta­ło wcze­śniej nadane. Oto ode­bra­nie prawa od­czy­tu z po­przed­nie­go przy­kła­du:
1
2
REVOKE SELECT ON sklep.* FROM 'raport'@'localhost';
SHOW GRANTS FOR 'raport'@'localhost';
SHOW GRANTS (POKAŻ NADANE UPRAWNIENIA) wy­świe­tla nada­nia dla konta. Jeśli w wyniku po­ja­wia się USAGE, nie ozna­cza to prawa czy­ta­nia wszyst­kich tabel. To okre­śle­nie braku przy­zna­nych upraw­nień na danym po­zio­mie. Samo ist­nie­nie konta i po­myśl­ne lo­go­wa­nie nie do­wo­dzą do­stę­pu do danych.
Po zmia­nie naj­le­piej wy­ko­nać próbę z nowego po­łą­cze­nia tego użyt­kow­ni­ka. Sprawdź ope­ra­cję do­zwo­lo­ną i taką, która po­win­na zostać od­rzu­co­na. Konto raport mające tylko SELECT po­win­no od­czy­tać pro­duk­ty, lecz od­mó­wić do­pi­sa­nia re­kor­du. Test wy­ko­na­ny nadal jako root nie spraw­dza ogra­ni­czeń konta raport. To częsta przy­czy­na myl­ne­go wnio­sku, że ode­bra­nie praw nie za­dzia­ła­ło.
Upraw­nie­nia mogą po­cho­dzić z róż­nych po­zio­mów lub ról, czyli na­zwa­nych ze­sta­wów praw. Ode­bra­nie jed­ne­go nada­nia nie jest ogólną regułą za­ka­zu­ją­cą ope­ra­cji, jeśli konto nadal otrzy­mu­je ją inną drogą. Przy roz­bież­no­ści trzeba spraw­dzić pełny wynik SHOW GRANTS i ak­tyw­ny kon­tekst sesji. W ćwi­cze­niach z tej lekcji sto­su­je­my proste, bez­po­śred­nie nada­nia, aby zakres był jed­no­znacz­ny.
Po CREATE USER, GRANT i REVOKE nie trzeba ru­ty­no­wo do­pi­sy­wać FLUSH PRIVILEGES (ODŚWIEŻ UPRAWNIENIA). Serwer ob­słu­gu­je zmiany wy­ko­na­ne tymi in­struk­cja­mi. Nie edy­tu­je­my ręcz­nie tabel sys­te­mo­wych z upraw­nie­nia­mi. Szcze­gó­ły mo­men­tu obo­wią­zy­wa­nia zmiany zależą od ro­dza­ju prawa i ist­nie­ją­cych po­łą­czeń, co jest do­dat­ko­wym po­wo­dem te­sto­wa­nia świe­żej sesji.

Wiele osób i bez­piecz­na kon­fi­gu­ra­cja

Praca wielu użyt­kow­ni­ków wymaga roz­dzie­le­nia zadań. Ad­mi­ni­stra­tor za­rzą­dza struk­tu­rą i kon­ta­mi, apli­ka­cja wy­ko­nu­je po­trzeb­ne ope­ra­cje, a konto ra­por­to­we czyta dane. Jeżeli dwie osoby zmie­nia­ją ten sam rekord, spój­ność ope­ra­cji zależy także od trans­ak­cji i reguł bazy. Same konta roz­wią­zu­ją pro­blem do­stę­pu, ale nie za­stę­pu­ją me­cha­ni­zmu po­praw­ne­go za­pi­sy­wa­nia zmian.
Zdalny dostęp wymaga kilku zgod­nych usta­wień: serwer musi na­słu­chi­wać na wła­ści­wym in­ter­fej­sie, zapora do­pusz­czać po­łą­cze­nie, a konto pa­so­wać do źródła. Otwie­ra­nie portu wszyst­kim ad­re­som nie na­pra­wia błęd­ne­go hasła. Na rze­czy­wi­stym ser­we­rze dostęp ogra­ni­cza się do po­trzeb­nych hostów, chroni trans­mi­sję i spraw­dza dzien­ni­ki po­łą­czeń. Zmiana po­je­dyn­cze­go pa­ra­me­tru bez spraw­dze­nia po­zo­sta­łych nie daje pełnej kon­fi­gu­ra­cji.
phpMyAdmin jest klien­tem ad­mi­ni­stra­cyj­nym dzia­ła­ją­cym przez WWW. Jego panel użyt­kow­ni­ków uła­twia two­rze­nie kont i usta­wia­nie praw, ale nadal wy­ko­nu­je ope­ra­cje ser­we­ra bazy. Zmiana wy­glą­du panelu nie zmie­nia zna­cze­nia nazwy i hosta. Po klik­nię­ciu za­twier­dze­nia należy od­czy­tać wynik, a na­stęp­nie spraw­dzić konto od­po­wied­nim po­łą­cze­niem.

Na eg­za­mi­nie

Czytaj in­struk­cję od środka: jakie ope­ra­cje, na jakich obiek­tach i dla któ­re­go konta. GRANT SELECT na całej bazie nie daje INSERT, a REVOKE nie usuwa użyt­kow­ni­ka. Konto za­pi­sa­ne z innym hostem jest innym kontem nawet przy tej samej nazwie. Od­wró­ce­nie TO i FROM psuje skład­nię: na­da­je­my TO, od­bie­ra­my FROM.
Pu­łap­ka: po­praw­ne hasło po­twier­dza toż­sa­mość konta, ale nie nadaje mu do­stę­pu do tabel. Uwie­rzy­tel­nia­nie i upraw­nie­nia mają od­ręb­ne za­da­nia.
W za­da­niu prak­tycz­nym za­cho­waj wy­ma­ga­ną nazwę i zakres praw. Nie po­sze­rzaj ich dla wygody, gdy pierw­sze po­łą­cze­nie zo­sta­nie od­rzu­co­ne. Sprawdź ko­mu­ni­kat, host, nazwę bazy i użyt­kow­ni­ka, a dowód wy­ko­na­nia przy­go­tuj bez ujaw­nia­nia hasła.

Ściąga

Ele­ment
Za­da­nie
nazwa i host
razem iden­ty­fi­ku­ją konto
CREATE USER
utwo­rze­nie konta
GRANT
nada­nie praw
REVOKE
ode­bra­nie kon­kret­ne­go nada­nia
SHOW GRANTS
spraw­dze­nie przy­dzie­lo­nych praw
sklep.*
obiek­ty jednej bazy
sklep.pro­dukt
jedna tabela
WITH GRANT OPTION
moż­li­wość prze­ka­zy­wa­nia praw
Pobierz ściągę PDF
ZAWODNIK
egzamin zawodowy INF.02 · INF.03 · INF.04
Serwer Discord›
Egzaminy zawodowe IT/Matury/Studia
@yastor
© 2026 Zawodnik · by Yastor
Arkusze i zasady oceniania pochodzą z CKE. Serwis nie jest powiązany z Centralną Komisją Egzaminacyjną.