-
Spustite si svoj server. Potom sa prepnite na windows stanicu, prihláste sa a zvyšok cvičenia už pracujte len tu.
-
Prihláste sa na server prostredníctvom ssh prístupu pomocou programu putty.
Po prihlásení urobte zo seba správcu.
-
Vyhľadanie inštalačných balíkov
apt list | grep maria |less
Zvislá čiara je Altgr+W
Ukončenie prezerania Q
Vo výpise si všimnite že okrem mariadb existuje aj malík maria čo je nejaký
balík pre matematiku
-
apt update
Pre istotu si urobíme aktualizáciu zoznamu inštalačných balíkov
-
apt install mariadb-server
Týmto príkazom sa nainštaľuje aj mariadb-klient
-
Skontroľujeme si či sa databázový démon spustil a normálne beží.
service mariadb status
-
Skúsime sa pripojiť k databáze pomocou CLI klienta je jedno či použijeme straší príkaz mysql
alebo mariadb
root@macik:~# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 35
Server version: 10.11.6-MariaDB-0+deb12u1 Debian 12
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
-
Vyskúšame si zopár základných príkazov ako je help, status, exit, quit
Všimnite si aj možnosť skráteného zápisu pomocou znaku \
Tento spôsob sa hodí ak budeme potrebovať vložiť príkaz medzi už
MariaDB [(none)]> help
General information about MariaDB can be found at
http://mariadb.org
List of all client commands:
Note that all text commands must be first on line and end with ';'
? (\?) Synonym for `help'.
clear (\c) Clear the current input statement.
connect (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter.
edit (\e) Edit command with $EDITOR.
ego (\G) Send command to MariaDB server, display result vertically.
exit (\q) Exit mysql. Same as quit.
go (\g) Send command to MariaDB server.
help (\h) Display this help.
nopager (\n) Disable pager, print to stdout.
notee (\t) Don't write into outfile.
pager (\P) Set PAGER [to_pager]. Print the query results via PAGER.
print (\p) Print current command.
prompt (\R) Change your mysql prompt.
quit (\q) Quit mysql.
rehash (\#) Rebuild completion hash.
source (\.) Execute an SQL script file. Takes a file name as an argument.
status (\s) Get status information from the server.
system (\!) Execute a system shell command.
tee (\T) Set outfile [to_outfile]. Append everything into given outfile.
use (\u) Use another database. Takes database name as argument.
charset (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
warnings (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.
For server side help, type 'help contents'
MariaDB [(none)]> status
--------------
mysql Ver 15.1 Distrib 10.11.6-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper
Connection id: 35
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server: MariaDB
Server version: 10.11.6-MariaDB-0+deb12u1 Debian 12
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb3
Conn. characterset: utf8mb3
UNIX socket: /run/mysqld/mysqld.sock
Uptime: 33 min 41 sec
Threads: 1 Questions: 113 Slow queries: 0 Opens: 38 Open tables: 31 Queries per second avg: 0.055
--------------
MariaDB [(none)]> exit
Bye
root@macik:~#
-
Znova si spustíme klienta. Zadajte príkaz help.
Všimnite si aj možnosť skráteného zápisu pomocou znaku \
Tento spôsob sa hodí ak budeme potrebovať vložiť príkaz na ovládanie klienta medzi iné SQL príkazy.
Teraz sa ukážeme ako sa dajú zadávať príkazy jazyka SQL.
Tu platí že každý takýto príkaz musí byť ukončený znakom ;
Hlavne zozačiatku sa na to bude zabúdať. V skutočnosti to vôbec nevadí. Tento mechanizmus je tu hlavne
preto aby sme mohli zadávať dlhé SQL príkazy na viac riadkov. Príkaz sa teda neukončí a nepošle na vykonanie pokiaľ
na konci nebude znak ;
Ak ho tam zabudneme napísať znamená to že ho pokojne môžeme dopísať na ďalšom riadku.
Ako príklad si ukážme ako by sa mohol zapísať príkaz show databases;
ktorý slúži na zobrazenie databáz.
MariaDB [(none)]> show
-> databases
-> ;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0,000 sec)
Najprv som zadal príkaz show. Pojeho odoslaní sa mi zobrazil pokračovací riadok pretože som neukončil príkaz.
Teraz som si uvedomil že potrebujem zadať aj čo chcem zobraziť a tak som pridal kľúčové slovo databases
Ale zase som dostal pokračovací riadok pretože som opäť príkaz neukončil.
Lenže v tomto momente už je to všetko a chcem príkaz ukončiť čo urobím tak že napíšem samotný znak ;
To má za následok že celé sa to pochopí ako jeden príkaz a správne sa to vykoná.
-
Ďalej treba vedieť čo robiť ak sa v príkaze pomýlime.
Pokiaľ sme na riadku ktorý sme ešte neodoslali je to jednoduché a pomocou editačných kláves môžeme riadok opraviť.
Horšia je situácia ak riadok bol odoslaný ale nebol ukončený príkaz. Vtakom prípade môžeme príkaz ukončiť a odoslať s tým
že bude naslebovať chyba, alebo môžeme použiť skratku \c
ktorá celý zadaný vstup zmaže.
MariaDB [(none)]> shov
-> data\c
MariaDB [(none)]>↑ shov data
V druhom riadku po napísaní zopár písmen som si uvedomil že som zadal chybne príkaz show
a tak som zrušil celý vstupný príkaz. Samozrejme aj tu funguje história vstupov a tak si pomocou klávesy ↑
môžem vyvolať predošlé zadané riadky a prípadne ich aj editovať pred odoslaním
-
Keď už vieme ako s CLI klientom pracovať tak si skúsme pozrieť databázu mysql
Aby sme to mohli robiť jednoducho tak najprv príkazom use menoDb
povieme že chceme databázu používať.
MariaDB [(none)]> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [mysql]>
Dostali sme informáciu že client si načítal mená tabuliek a stĺpcov aby ich mohol dopĺňať a aj informáciu
ako sa tomu dá zabrániť. Nakoniec sme informovaný že databáza bola zmenená o čom svedčí výzva kde už v hranatých
zátvorkách nefiguruje nápis (none), čo znamená že nepracujeme so žiadnou konkrétnou databázou.
Ale máme tam už informáciu že pracujeme s databázou ktorú sme si dali do používania
-
Teraz by asi každého napadlo že databáza sa skladá z nejakých tabuliek. To znamená že si chcem pozrieť ich názvy
Stačí zadať príkaz show tables;
a dostaneme odpoveď.
MariaDB [mysql]> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| column_stats |
| columns_priv |
| db |
| event |
| func |
| general_log |
| global_priv |
| gtid_slave_pos |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| index_stats |
| innodb_index_stats |
| innodb_table_stats |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| roles_mapping |
| servers |
| slow_log |
| table_stats |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| transaction_registry |
| user |
+---------------------------+
31 rows in set (0,000 sec)
-
Teraz vidím že databáza obsahuje 31 tabuliek (čo nie je celkom pravda). Sú to tabuľky ktoré používa
samotná databáza na svoje fungovanie. Z celého zoznamu mi ako jediný názov niečo pripomína tabuľka user
a preto by som si ju rád zobrazil.
Tu už treba poznať základné príkazy jazyka SQL select * from user;
a dostaneme odpoveď.
MariaDB [mysql]> select * from user;
+-----------+-------------+----------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+---------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-----------------------+------------------+---------+--------------+--------------------+
| Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | Create_tablespace_priv | Delete_history_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections | plugin | authentication_string | password_expired | is_role | default_role | max_statement_time |
+-----------+-------------+----------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+---------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-----------------------+------------------+---------+--------------+--------------------+
| localhost | mariadb.sys | | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | | | | | 0 | 0 | 0 | 0 | mysql_native_password | | Y | N | | 0.000000 |
| localhost | root | invalid | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 | 0 | mysql_native_password | invalid | N | N | | 0.000000 |
| localhost | mysql | invalid | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 | 0 | mysql_native_password | invalid | N | N | | 0.000000 |
+-----------+-------------+----------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+---------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-----------------------+------------------+---------+--------------+--------------------+
3 rows in set (0,001 sec)
Och to je ale dlhá tabuľka. Keď to prekopírujem sem na web stránku tak sa to zobrazí celkom pekne ale aj tak je to dosť neprehľadné.
Oveľa horšie to dopadne na terminály, kde nemáme dostatočnú šírku. A tak sa jeden riadok vypíše do niekoľkých riadkov terminála. A to je už tak neprehľadné že
sa z toho vôbec nedá vyznať.
-
Preto použijem skratku ktorá je uvedená v helpe ako \G
Táto skratka posiela príkaz k vykonaniu ale na rozdiel od \g alebo znaku ;
zobrazuje výsledok po jednotlivých riadkoch.
MariaDB [mysql]> select * from user\G
*************************** 1. row ***************************
Host: localhost
User: mariadb.sys
Password:
Select_priv: N
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Reload_priv: N
Shutdown_priv: N
Process_priv: N
File_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Show_db_priv: N
Super_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Execute_priv: N
Repl_slave_priv: N
Repl_client_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Create_user_priv: N
Event_priv: N
Trigger_priv: N
Create_tablespace_priv: N
Delete_history_priv: N
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string:
password_expired: Y
is_role: N
default_role:
max_statement_time: 0.000000
*************************** 2. row ***************************
Host: localhost
User: root
Password: invalid
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: Y
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y
Super_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Execute_priv: Y
Repl_slave_priv: Y
Repl_client_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Create_user_priv: Y
Event_priv: Y
Trigger_priv: Y
Create_tablespace_priv: Y
Delete_history_priv: Y
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string: invalid
password_expired: N
is_role: N
default_role:
max_statement_time: 0.000000
*************************** 3. row ***************************
Host: localhost
User: mysql
Password: invalid
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: Y
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y
Super_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Execute_priv: Y
Repl_slave_priv: Y
Repl_client_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Create_user_priv: Y
Event_priv: Y
Trigger_priv: Y
Create_tablespace_priv: Y
Delete_history_priv: Y
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string: invalid
password_expired: N
is_role: N
default_role:
max_statement_time: 0.000000
3 rows in set (0,001 sec)
Stále je to dlhá tabuľka. Ale už je to prehľadnejšie a hlavne si teraz aj v terminále môžem zistiť že tabuľka zatiaľ obsahuje iba troch užívateľov.
Z toho je jeden root. A pokiaľ sa prihlási z localhost, teda lokálne na danom serveri, tak má
plné práva na všetky databázové operácie.
Pozor na to že to je úplne iný správca než je správca servera. Toto je správca databázového servera, ktorý nebýva totožný so správcom servera.
Druhý poznatok je že zatiaľ sme totuto databázovému správcovi nenastavovali heslo (inštalácia db sa na žiadne heslo nepýtala).
-
Databáza s nenastaveným heslom je bezpečnostné riziko a preto by bolo veľmi dobré si heslo pre správcu databázy nastaviť.
Ukončime teda klienta príkazom exit a skúsme aké existujú príkazy ktoré začínajú slovom mysql
To sa robí tak že sa po zadaní textu dvakrát stisne tabelátor.
MariaDB [mysql]>exit
Bye
root@macik:~# mysql Tab Tab
mysql mysqld_safe mysqlimport mysqlshow
mysqlaccess mysqld_safe_helper mysql_install_db mysqlslap
mysqladmin mysqldump mysqloptimize mysql_tzinfo_to_sql
mysqlanalyze mysqldumpslow mysql_plugin mysql_upgrade
mysqlbinlog mysql_find_rows mysqlrepair mysql_waitpid
mysql_convert_table_format mysql_fix_extensions mysqlreport
mysqld mysqlhotcopy mysql_secure_installation
mysqld_multi mysqlcheck mysql_setpermission
root@macik:~# mysql
-
Predošlého zoznamu príkazov to pomerne jednoznačne ukazuje že treba použiť príkaz
mysql_secure_installation
Na všetky otázky doporučujem odpovedať stisnutím klávesy Enter
Tak sa potvrdia prednastavené bezpečné voľby. Po otázke nastavenie hesla správcu
zadajte heslo 123456
root@macik:~# mysql_secTabure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none):Enter
OK, successfully used password, moving on...
Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.
You already have your root account protected, so you can safely answer 'n'.
Switch to unix_socket authentication [Y/n]Enter
Enabled successfully!
Reloading privilege tables..
... Success!
You already have your root account protected, so you can safely answer 'n'.
Change the root password? [Y/n]Enter
New password:123456Enter
Re-enter new password:123456Enter
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n]Enter
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n]Enter
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n]Enter
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n]Enter
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
root@macik:~#
-
Konečne je to správne nastavené a teraz si ukážeme ako obyčajný užívateľ môže robiť správcu databázy.
Stačí mu len prezradiť aké je meno správcu root a aké je heslo tohoto správcu
123456, ktoré sme zadali pre jednoduchosť iba takéto.
Ako prvé sa odhlásim zo správcovského účtu a potom spustím CLI mysql a dvomi voľbami.
-u root nastavuje užívateľa ktorý sa má k databáye prihlásiť.
-p slúži ako ziadosť o zadanie hesla
root@macik:~#logout
peter@macik:~$ mysql -u root -p
Enter password:123456
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 54
Server version: 10.11.6-MariaDB-0+deb12u1 Debian 12
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
A vidíte ako normálny unixový uživateľ peter sa prihlásil ako správca databázy
a má ju teraz plne pod kontrolou.
-
Ukončite mysql príkazom exit
a prihláste sa opäť ako správcovia servera. a nainštalujte balík phpmyadmin
root@macik:~#apt install phpmyadmin
Po odsúhlasení inštalácie sa najprv stiahnu všetky potrebné inštalačné balíčky. Tie sa potom rozbalia na disk.
Nakoniec sa spustí konfigurátor inštalácie balíka phpmyadmin
Ten poznáte podľa modrej obrazovky a bude sa pýtať ktorý web server používate. Dajú sa nastaviť dva najčastejšie
web servery apache2 a lighttpd
Nastavovanie sa aktivuje medzerníkom a zobrazí sa tam hviezdička. Šipkami sa dá chodiť hore dolu a medzerníkom sa
dá konfigurácia zapnúť a vypnúť. Po nastavení ako je to na obrázku sa klávesou Tab
prejde na OK a pokračuje sa v inštalácii
Naásledne treba ešte nakonfigurovať prístupové heslo k databáze. Najprv je treba odsúhlasiť, tento dialóg
A potom už len dvakrát zadať heslo pre databázu ktorá sa vytvorí pre phpmyadmin.
Tiež doporučujem zadať heslo 123456