MySQL on suosittu tietokantapalvelin, jota käytetään erilaisissa sovelluksissa. SQL on lyhenne sanoista Strcutured Query Language, mitä kieltä MySQL käyttää kommunikointiin muiden ohjelmien kanssa. MySQL:lla on omat laajennetut SQL-toimintonsa, joilla tarjotaan lisätoimivuutta käyttäjille. Tässä dokumentissa tutustumme, kuinka teet ensimmäisen MySQL-asennuksesi, luomme tietokantoja ja taulukoita, sekä luomme uusia käyttäjiä. Aloitetaan asennuksesta.
Aivan ensimmäiseksi varmista, että MySQL on asennettu järjestelmääsi. Jos tarvitset jotain tiettyjä MySQL-toimintoja, varmista että sinulla on vaadittavat USE-asetukset, sillä näin saat oikeat viritykset asennukseen.
Koodilistaus 1.1: Asennetaan MySQL |
(Katso saatavilla olevat USE-asetukset) # emerge --pretend --verbose mysql (Asenna MySQL) # emerge mysql |
Asennuksen päätteeksi näet seuraavan tiedotteen:
Koodilistaus 1.2: MySQL:n einfo-viesti |
Haluat ehkä suorittaa seuraavan: "emerge =dev-db/mysql-[version] --config" jos tämä on uusi asennus. |
Koska tämä on uusi asennus, suoritamme komennon. Sinun täytyy painaa ENTERiä, kun kehote tulee asettaessasi MySQL-tietokantaa. Tässä määritellään MySQL:n tärkein tietokanta, mikä sisältää järjestelmän valvonnalliset tiedot, kuten tietokannat, taulukot, käyttäjät, oikeudet jne. Tässä vaiheessa myös ehdotetaan, että vaihtaisit pääkäyttäjän salasanaa mahdollisimman pikaisesti. Näin tosiaankin teemme, muuten joku muu voi sen tehdä ja hakkeroida meidän MySQL-palvelimellemme.
Koodilistaus 1.3: MySQL:n muokkaaminen |
(Korvaa [versio] tuoreimman asennuksen versioluvulla.) # emerge --config =dev-db/mysql-[versio] * MySQL DATADIR on sijainnissa /var/lib/mysql * Paina ENTER luodaksesi "mysql"-tietokanta ja asettaaksesi asianmukaisemmat * oikeudet, tai Control-C poistuaksesi... Valmistellaan db-taulukko Valmistellaan host-taulukko Valmistellaan user-taulukko Valmistellaan func-taulukko Valmistellaan tables_priv-taulukko Valmistellaan columns_priv-taulukko Asennetaan kaikki valmisteltut taulukot Käynnistääksesi mysqld:n bootista, sinun täytyy kopioida support-files/mysql.server oikeaan paikkaa järjestelmässäsi MUISTATHAN ASETTAA SALASANAN MySQL:n root-KÄYTTÄJÄLLE(pääkäyttäjä) Ja tehdäksesi tämän, suorita seuraavat komennot käynnistääksesi palvelimen ja vaihtaaksesi sopivat salasanat: (Huomaa seuraavat 3 riviä) /etc/init.d/mysql start /usr/bin/mysqladmin -u root -h pegasos password 'new-password' /usr/bin/mysqladmin -u root password 'new-password' Riippuen asetuksistasi, -p-valitsinta saatetaan tarvita viimeisessä komennossa. Katso manuaaleista lisää yksityiskohdista. (Jotkut tietyt MySQL informaatiot joita ei ole ebuildissa, on poistettu, jotta tämä ohje pysyisi mahdollisimman johdonmukaisena) * Turvallisuussyistä johtuen, sinun on syytä asettaa MySQL pääkäyttäjän * salasana mahdollisimman pikaisesti. |
Tärkeää: mysql-4.0.24-r2-versiosta lähtien salasanat on annettava asettelu-vaiheessa, jotta pääkäyttäjän kirjautuminen olisi turvallisempaa. |
Skripti tulostaa komennot, joita tarvitaan asettaaksemme salasanan, joten suoritamme ne nyt.
Koodilistaus 1.4: Asetetaan MySQL-pääkäyttäjän salasana |
# /etc/init.d/mysql start * Re-caching dependency info (mtimes differ)... * Käynnistetään mysqld (/etc/mysql/my.cnf) ... [ ok ] (Laita ”new-password”-kohtaan haluamasi salasana) # /usr/bin/mysqladmin -u root -h localhost password 'new-password' |
Nyt voit testata, että pääkäyttäjän salasana luotiin onnistuneesti, yrittämällä kirjautua MySQL-palvelimelle:
Koodilistaus 1.5: Kirjautuminen MySQL-palvelimelle, käyttämällä "mysql"-komentoa |
$ mysql -u root -h localhost -p
Anna salasanasi:
Tervetuloa MySQL:een. Komennot päättyvät joko ; tai \g.
MySQL-yhteytesi tunnus on 4 palvelin versioon: 4.0.24-debug
Kirjoita 'help;' tai '\h' saadaksesi apua. Kirjoita '\c' tyhjentääksesi ruudun.
mysql>
|
Valitsin -u asettaa käyttäjän, joka on kirjautumassa sisään. Valitsin -h asettaa koneennimen. Tämä on yleensä localhost, paitsi jos olet pystyttämässä etäserveriä. Lopuksi, valitsin -p kertoo mysql-clientille , että tulet antamaan salasanan, päästäksesi sisään tietokantaan. Huomaa mysql> kehote. Siihen kirjoitat kaikki komentosi. Nyt kun meillä on käytössämme mysql-kehote pääkäyttäjänä, voimme aloittaa tietokannan muokkaamisen.
2. Asetusten tekeminen tietokantaan
Olemme nyt kirjautuneet sisään ja mysql-kehote on näytöllä. Katsotaanpa ensin, mitä tietokantoja meillä on. Ne me näemme, kun käytämme komentoa SHOW DATABASES.
Koodilistaus 2.1: MySQL:n tietokannat |
mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 riviä (0.09 sek)
|
Tärkeää: Kannattaa huomioida, että MySQL-komentojen pitää päättyä puolipisteeseen — ; |
Siitä huolimatta, että ”test”-tietokanta on jo luotuna, me luomme oman tietokannan. Tietokanta luodaan käyttämällä komentoa CREATE DATABASE. Luomme nyt tietokannan nimeltä ”gentoo”.
Koodilistaus 2.2: Luodaan "gentoo"-tietokanta |
mysql> CREATE DATABASE gentoo;
Kysely onnistui, 1 rivi vaikutusalueella (0.08 sek)
|
Vastaus kertoo meille, että komento on suoritettu ilman virheitä. Tässä tapauksessa, yhtä riviä on muokattu. Tämä on viittaus ”mysql”-tietokantaan, joka pitää kirjaa kaikista tietokannoista. Sinun ei tarvitse miettiä turhaan taustalla tapahtuvia yksityiskohtia. Viimeinen numero kertoo, kuinka nopeasti kysely suoritettiin. Voimme tarkistaa, että tietokanta on tosiaankin olemassa, suorittamalla taas komennon SHOW DATABASES.
Koodilistaus 2.3: Tarkistetaan, että tietokannan luominen onnistui |
mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| gentoo |
| mysql |
| test |
+----------+
3 riviä (0.00 sek)
|
Ja tosiaankin, tietokanta on nyt luotuna. Seuraava toimenpide, kun luomme taulukoita uuteen ”gentoo”-tietokantaamme, on valita se käytettäväksi tietokannaksi. Ja tämä onnistuu komennolla USE. USE-komentoon liitetään sen tietokannan nimi, joka halutaan käyttöön. Toinen vaihtoehto on laittaa tietokannanimi komentorivillä valitsimen -p jälkeen. Mennäänpä eteenpäin ja vaihdetaan ”gentoo”-tietokantaan.
Koodilistaus 2.4: Siirrytään "gentoo"-tietokantaan |
mysql> USE gentoo;
Tietokanta vaihdettu
|
Ja tällä hetkellä käytössä oleva tietokanta on aikaisemmin luomamme ”gentoo”-tietokanta. Nyt kun se on käytössämme, voimme luoda muutaman taulukon ja laittaa niihin tietoa.
3. Työskentely MySQL-taulukoiden kanssa
MySQL:n rakenteessa on tietokannat, taulukot, tietueet ja sarakkeet. Tietokannat muodostuvat taulukoista, taulukot muodostuvat tietueista, tietueet muodostuvat sarakkeista, mitkä pitävät sisällään varsinaisen tiedon. Rakenne antaa käyttäjien valita, kuinka he haluavat päästä käsiksi tietoihinsa. Tähän asti olemme toimineet tietokantojen kanssa, mutta nyt siirrymme työskentelemään taulukoiden kanssa. Ensiksikin, taulukot voidaan listata samalla tavalla kuin tietokannatkin, käyttämällä komentoa SHOW TABLES. Vielä meillä ei ole taulukoita ”gentoo”-tietokannassa, niinkuin voimme todeta suorittamalla komennon:
Koodilistaus 3.1: Tyhjä "gentoo"-tietokanta |
mysql> SHOW TABLES;
Tyhjä joukko (0.00 sek)
|
Meidän siis tarvitsee luoda muutama taulukko. Siihen käytämme komentoa CREATE TABLE. Tämä komento on kuitenkin hiukan erilainen, kuin yksinkertainen komento CREATE DATABASE. Komento vaatii listan argumentteja. Seuraavassa näet sen muodon:
Koodilistaus 3.2: CREATE TABLE Syntaksi |
CREATE TABLE [table_name] ([field_name] [field_data_type]([size])); |
table_name on se taulukon nimi, jonka haluamme luoda. Tässä tapauksessa luodaan taulukko developers(kehittäjät). Tämä taulukko sisältää kehittäjien nimen(name), sähköpostiosoitteen(email) ja työnimikkeen(job). field_name sisältää sarakkeen nimen. Tässä tapauksessa meillä on kolme sarakkeen nimeä: name, email ja job. field_data_type on se muoto, jolla tiedot on varastoitu. Saatavilla olevat erilaiset muodot löydät MySQL Column Types Page-sivulta. Meidän tapauksessamme käytämme sarakkeessa tiedon muotoa VARCHAR. VARCHAR on yksi yksinkertaisimmista tiedon muodoista, kun työskennellään merkkijonojen kanssa. size kertoo kuinka paljon tietoa yhteen tietueen sarakkeeseen on varastoituna. Tässä tapauksessa määrä on 128. Tämä tarkoittaa sitä, että tietueen yhdessä sarakkeessa voi olla VARCHAR-tietoa 128 tavua. Sinä voit toistaiseksi huoletta ajatella, että tietueen yhdessä sarakkeessa on tällöin 128 merkkiä, kuitenkin tälle on jonkin verran teknisempi selitys, mitä tuo määrä sinulle tarjoaa. Nyt kun on tiedämme miten taulukko luodaan, niin luodaan se.
Koodilistaus 3.3: Luodaan taulukko |
mysql> CREATE TABLE developers ( name VARCHAR(128), email VARCHAR(128), job VARCHAR(128));
Kysely onnistui, 0 riviä vaikutusalueella (0.11 sek)
|
Näyttäisi siltä, että taulukko on luotu oikein. Tarkistetaanpa se vielä komennolla SHOW TABLES:
Koodilistaus 3.4: Tarkistetaan taulukon olemassaolo |
mysql> SHOW TABLES;
+------------------+
| Tables_in_gentoo |
+------------------+
| developers |
+------------------+
1 rivi (0.00 sek)
|
Kyllä, taulukko näkyy nyt. Siinä ei kuitenkaan ole vielä mitään tietoa muodostamissamme kentissä. Siksi käytämme komentoa DESCRIBE (tai lyhyesti DESC), mikä vaatii taulukon nimen argumentikseen. Katsotaanpa, mitä se näyttää meille ”developers”-taulukosta.
Koodilistaus 3.5: "developers"-taulukon kuvaus |
mysql> DESCRIBE developers;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| name | varchar(128) | YES | | NULL | |
| email | varchar(128) | YES | | NULL | |
| job | varchar(128) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
3 riviä (0.00 sek)
|
Tämä näyttää eri sarakkeet ja niiden tyypit. Se näyttää myös muutaman lisäominaisuuden, joita ei käydä läpi tässä ohjeessa. Voit kuitenkin vapaasti etsiä MySQL Reference Manual -sivulta lisätietoa aiheesta. Nyt meillä on taulukko, jonka kanssa voimme työskennellä. Jatketaanpa nyt eteenpäin ja aloitetaan taulukon täyttö.
Nyt voimme syöttää siihen tietoa komennolla INSERT. Niin kuin komennolla CREATE TABLE, tälläkin komennolla on tietty muoto:
Koodilistaus 3.6: INSERT Syntaksi |
INSERT INTO table (col1, col2, ...) VALUES('value1', 'value2', ...);
|
Tällä komennolla lisätään tietue taulukkoon. table-kohtaan laitamme sen MySQL-taulukon, johon haluamme tiedot syöttää. Taulukon nimen jälkeen laitetaan sarakkeiden nimet, joihin tieto laitetaan ja VALUE() sisältää ne arvot, jotka haluamme syöttää taulukkoon. Voit jättää pois sarakeluettelon, jos lisäät tietoa jokaiseen sarakkeeseen ja lisäät tiedot samassa järjestyksessä kuin sarakkeet on määritelty. Tässä tapauksessa, haluamme lisätä tietoa ”developers”-taulukkoon. Laitetaanpa nyt sinne esimerkki tietueet:
Koodilistaus 3.7: Syötetään tietoa "developers"-taulukkoon |
mysql> INSERT INTO developers VALUES('Joe Smith', 'joesmith@gentoo.org', 'toolchain'); Kysely onnistui, 1 rivi vaikutusalueella (0.06 sek) (Jos et tiedä missä järjestyksessä sarakkeet ovat taulukossa tai haluat lisätä vajaan tietueen) mysql> INSERT INTO developers (job, name) VALUES('outsourced', 'Jane Doe'); Kysely onnistui, 1 rivi vaikutusalueella (0.01 sek) |
Palautteen mukaan näyttäisi siltä, että tietue on lisätty oikein. Mutta mitäs jos haluamme lisätä enemmän, kuin vain yhden tietueen? Tässä tapauksessa kannattaa käyttää LOAD DATA-komentoa. Tämä lisää tietueita tiedostosta, jossa on käytetty sarkainta sarakkeiden välillä. Me käytämme tiedostoa records.txt. Tässä on esimerkki:
Koodilistaus 3.8: ~/records.txt |
John Doe johndoe@gentoo.org portage Chris White chriswhite@gentoo.org documentation Sam Smith samsmith@gentoo.org amd64 |
Tärkeää: Varmistu siitä, mitä tietoa käsittelet. Ei ole turvallista käyttää komentoa LOAD DATA, jos et ole varma tiedoston sisällöstä! |
LOAD DATA-komennolla on laajempiakin määritelmiä, mutta me käytämme tässä yksinkertaisinta.
Koodilistaus 3.9: LOAD DATA Syntaksi |
LOAD DATA LOCAL INFILE '/path/to/filename' INTO TABLE table; |
/path/to/filename on hakemisto ja tiedoston nimi, jota käytetään. table kohtaan sen taulukon nimi, jota käytetään. Tässä tapauksessa tiedostomme on ~/records.txt ja taulukko on ”developers”.
Koodilistaus 3.10: Haetaan tiedot tiedostosta |
mysql> LOAD DATA LOCAL INFILE '~/records.txt' INTO TABLE developers;
Kysely onnistui, 3 riviä vaikutusalueella (0.00 sek)
Tulokset: 3 Poistettu: 0 Ohitettu: 0 Varoitukset: 0
|
Tärkeää: Jos ilmenee jotain erikoista käyttäytymistä, varmista että sarakkeet on erotettu toisistaan käyttäen sarkainta. Jos liität tietoa tiedostoon jostain toisesta lähteestä, se on saattanut muuttaa sarkainvälit ”normaaleiksi” välilyönneillä tehdyiksi. |
Se toimi hienosti. Tämä kuitenkin vain lisäsi tietueen, eikä antanut mahdollisuutta kontrolloida MySQL:tä. Monet verkkosovellukset käyttävät sql-skriptejä muokkaamaan MySQL nopeasti ja helposti. Jos haluat käyttää sql-skriptiä, sinun täytyy ajaa MySQL komentojonotilassa, tai käyttää tiedostoa komentojen lähteenä. Tässä esimerkissä ajetaan MySQL komentojonotilassa:
Koodilistaus 3.11: MySQL komentojonotilassa |
$ mysql -u root -h localhost -p < sqlfile
|
Niinkuin LOAD DATAn kanssa, varmistu siitä mitä sqlfile tekee. Virhe saattaa vahingoittaa tietokantaasi. Toinen tapa jolla voit toteuttaa tämän, on käyttää source-komentoa. Tämä komento suorittaa mysql-komennot sql-tiedostosta, silloin kun mysql on interaktiivisessa tilassa. Näin tapahtuu sql-tiedoston käyttäminen komentojen lähteenä:
Koodilistaus 3.12: Käytä sql-tiedostoa komentojen lähteenä |
mysql> source sqlfile;
|
Jos huomaat verkkosovelluksen haluavan sinun suorittaa sql-tiedoston, kahta ylläolevaa komentoa käytetään tehtävän suorittamiseksi. Meillä on nyt taulukko asetettuna, siis kuinka tarkistamme sarakkeet? Sen teemme etsimällä tietoa käyttämällä kyselyitä.
MySQL-taulukoiden selaaminen käyttäen kyselyitä
Kyselyt on yksi tärkeimmistä ominaisuuksista missä tahansa SQL-tietokannassa. Ne auttavat muuttamaan taulukoiden tiedot käyttökelpoisiksi. Suurin osa kyselyistä tehdään komennolla SELECT. SELECT-komento on melko monimutkainen ja me tutustumme vain kolmeen tärkeimpään muotoon tässä ohjeessa.
Koodilistaus 3.13: SELECT-komennon muodot |
(Valitse kaikki tiedot taulukosta) SELECT * FROM table; (Valitse tietyt tiedot taulukosta) SELECT * FROM table WHERE field=value; (Valitse tietyt sarakkeet taulukosta) SELECT field1,field2,field3 FROM table [WHERE field=value]; |
Katsotaanpa nopeasti ensimmäistä muotoa. Se on suhteellisen yksinkertainen ja antaa yleisnäkymän taulukostasi. Me suoritamme sen nyt, jotta näkisimme mitä tietoa meillä on tähän mennessä.
Koodilistaus 3.14: Taulukon sisältö |
mysql> SELECT * FROM developers;
+-------------+-----------------------+----------------+
| name | email | job |
+-------------+-----------------------+----------------+
| Joe Smith | joesmith@gentoo.org | toolchain |
| John Doe | johndoe@gentoo.org | portage |
| Chris White | chriswhite@gentoo.org | documentation |
| Sam Smith | samsmith@gentoo.org | amd64 |
| Jane Doe | NULL | Outsourced job |
+-------------+-----------------------+----------------+
5 riviä (0.00 sek)
|
Näemme nyt molemmat tiedot, ne jotka lisäsimme käyttäen INSERT-komentoa, sekä LOAD DATA-komennolla lisätyt. Jos nyt halumme nähdä vain Chris Whiten tietueen, voimme tehdä sen käyttäen toisena ollutta muotoa, jonka näytimme aiemmin.
Koodilistaus 3.15: Valitaan tietty tietue komennolla SELECT |
mysql> SELECT * FROM developers WHERE name = 'Chris White';
+-------------+-----------------------+---------------+
| name | email | job |
+-------------+-----------------------+---------------+
| Chris White | chriswhite@gentoo.org | documentation |
+-------------+-----------------------+---------------+
1 rivi (0.08 sek)
|
Niin kuin odotettavissa oli, ne tietyt asiat joita haimme, on valittuna. Nyt voimme katsoa kuinka toimitaan, kun halutaan vain henkilön työnimike ja sähköpostiosoite, ei nimeä. Sen me voimme tehdä käyttämällä kolmatta muotoa komennosta SELECT, jonka näytimme aiemmin.
Koodilistaus 3.16: Valitaan tietty tietue ja sarake käyttäen komentoa SELECT |
mysql> SELECT email,job FROM developers WHERE name = 'Chris White';
+-----------------------+---------------+
| email | job |
+-----------------------+---------------+
| chriswhite@gentoo.org | documentation |
+-----------------------+---------------+
1 rivi (0.04 sek)
|
Tällä valintatavalla on helpompi käsitellä tietoa, varsinkin suurempia määriä, niinkuin tulemme näkemään myöhemmin. Juuri nyt, kun olemme pääkäyttäjänä, meillä on rajoittamattomat oikeudet MySQL:ssä. Palvelinympäristössä käyttäjä tälläisillä oikeuksilla voi olla ongelmallinen. Kontroloidaksemme kuka tekee mitäkin tietokannoissa, asetamme oikeudet.
Myönnetään oikeuksia GRANT-komennolla
Oikeuksilla tarkoitetaan sitä, miten käyttäjät pääsevät käsiksi tietokantoihin, taulukoihin, oikeastaan kaikkeen. Juuri nyt ”gentoo”-tietokannassa, MySQL:n pääkäyttäjä on ainoa joka pääsee käyttämään sitä ja jakamaan oikeuksia. Luodaan nyt kaksi yleisesti käytettyä käyttäjää, ”guest” ja ”admin”, jotka pääsevät ”gentoo”-tietokantaan ja voivat käsitellä sen tietoja. ”guest”-käyttäjällä on rajoitetummat oikeudet. Ainoa mitä se pystyy tekemään, on saada tietoa tietokannasta, eikä muuta. ”admin”-käyttäjällä on samat oikeudet kuin pääkäyttäjällä, mutta vain ”gentoo”-tietokantaan. (ei ”mysql”-tietokantaan). Ennenkuin aloitamme, katsotaanpa hieman tarkemmin jonkin verran yksinkertaistettua muotoa GRANT-komennosta.
Koodilistaus 4.1: GRANT Syntaksi |
GRANT [privileges] ON database.* TO '[user]'@'[host]' IDENTIFIED BY '[password]'; |
Huomaa: GRANT-komento on tarkoitettu käytettäväksi luotaessa käyttäjiä. MySQL:n myöhemmät versiot kuitenkin tulevat sisältämään CREATE_USER-toiminnon, silti GRANT-komentoa pidetään parempana. |
Aluksi meillä on ne oikeudet, jotka olemme halunneet antaa. Sen lisäksi mitä olemme oppineet tähän mennessä, niin tässä on muutamia oikeuksia, joita voit asettaa.
Huomaa: Jos käytät MySQL:tä niin, että se on yhteydessä verkko-sovellukseen, CREATE, SELECT, INSERT (käyty läpi tässä ohjeessa), DELETE and UPDATE (lisätiedon saamiseksi tutki linkkiä MySQL Reference Manual - GRANT and REVOKE Syntax kappaletta) ovat ainoat oikeudet joita todennäköisesti tarvitset. Monet tekevät sen virheen, että myöntävät kaikki oikeudet, kun se ei ole tarpeellista. Tarkista sovelluksen kehittäjiltä, aiheuttavatko nämä oikeudet ongelmia normaaleissa toimenpiteissä. |
”Admin”-käyttäjälle sopiva vaihtoehto on ALL. ”Guest”-käyttäjälle SELECT on riittävä, sillä saa vain lukuoikeudet. database kohtaan laitetaan se tietokanta, johon haluamme käyttäjälle antaa oikeudet. ”Gentoo” on tässä esimerkissä se tietokanta. Merkintä .* tarkoittaa kaikkia taulukoita. Jos haluat, voit antaa taulukko kohtaiset oikeudet. User-kohtaan laitat käyttäjän nimen ja host-kohtaan sen koneennimen, mistä käyttäjä kirjautuu. Suurimmassa osassa tapauksista, tähän kohtaan tulee localhost. Ja lopuksi password kohtaan laitetaan käyttäjän salasana. Näiden tietojen perusteella jatketaan eteenpäin, ja luodaan käyttäjät.
Koodilistaus 4.2: Luodaan "admin"- ja "guest"-käyttäjät |
(admin) mysql> GRANT ALL ON gentoo.* TO 'admin'@'localhost' IDENTIFIED BY 'password'; (guest) mysql> GRANT SELECT ON gentoo.* TO 'guest'@'localhost' IDENTIFIED BY 'password'; |
Nyt kun käyttäjät on luotu, testataan niiden toimivuus. Ensin kirjaudumme ulos MySQL:stä, kirjoittamalla quit komentokehoitteeseen:
Koodilistaus 4.3: Poistutaan MySQL:stä |
mysql> quit
|
Näin olemme palanneet konsoliin. Nyt kun meillä on käyttäjät luotuna, katsotaanpa mitä ne voivat tehdä.
Nyt yritämme kirjautua sisään ”guest”-käyttäjänä. Tällä hetkellä ”guest”-käyttäjällä on vain SELECT-oikeudet. Peritaatteessa tämä tarkoittaa sitä, että käyttäjä voi etsiä tietoa, ei mitään muuta. Kirjaudu nyt sisään ”guest”-käyttäjänä.
Koodilistaus 4.4: Kirjautuminen "guest"-käyttäjänä |
$ mysql -u guest -h localhost -p
Anna salasanasi:
Tervetuloa MySQL:een. Komennot päättyvät joko ; tai \g.
MySQL-yhteytesi tunnus on 6 palvelin versioon: 4.0.24-debug
Kirjoita 'help;' tai '\h' saadaksesi apua. Kirjoita '\c' tyhjentääksesi ruudun.
mysql>
|
Nyt meidän pitäisi testata käyttäjän rajoitteet. Vaihdetaanpa ”gentoo”-tietokantaan:
Koodilistaus 4.5: Vaihdetaan "gentoo"-tietokantaan |
mysql> USE gentoo;
Luetaan taulukoiden tietoja taulukon ja sarakkeiden nimien loppuunsaattamiseksi.
Voit poistaa tämän toimenpiteen ja saada nopeamman käynnistyksen valitsimella -A
Tietokanta vaihdettu
|
Yritetäänpä nyt tehdä jotain, mitä meidän ei oleteta tekevän. Koitetaan luoda taulukko.
Koodilistaus 4.6: Yritys luoda taulukko "guest"-käyttäjänä |
mysql> CREATE TABLE test (test VARCHAR(20), foobar VARCHAR(2));
VIRHE 1044: Pääsy kielletty käyttäjältä: 'guest@localhost' to database 'gentoo'
|
Kuten huomaatte, tämä toiminto epäonnistuu, koska käyttäjällämme ei ole sopivia oikeuksia. Myönsimme kuitenkin käyttäjälle yhden oikeuden, eli SELECT. Koitetaanpa nyt sitä:
Koodilistaus 4.7: Yritys käyttää SELECT-komentoa |
mysql> SELECT * FROM developers;
+-------------+-----------------------+----------------+
| name | email | job |
+-------------+-----------------------+----------------+
| Joe Smith | joesmith@gentoo.org | toolchain |
| John Doe | johndoe@gentoo.org | portage |
| Chris White | chriswhite@gentoo.org | documentation |
| Sam Smith | samsmith@gentoo.org | amd64 |
| Jane Doe | NULL | Outsourced job |
+-------------+-----------------------+----------------+
5 riviä (0.00 sek)
|
Komento onnistui, ja näin näytimme vilaukselta, mitä käyttäjän oikeuksilla voi tehdä. Me kuitenkin loimme myös ”admin”-käyttäjän. Tämä luotiin näyttääksemme, että jopa kaikilla oikeuksilla varustetulla käyttäjällä on rajoitteensa. Kirjauduppa nyt ulos MySQL:stä ja palaa tämän jälkeen sisään ”admin”-käyttäjänä.
Koodilistaus 4.8: Kirjautuminen "admin"-käyttäjänä |
mysql> quit Bye $ mysql -u admin -h localhost -p Anna salasanasi: Tervetuloa MySQL:een. Komennot päättyvät joko ; tai \g. MySQL-yhteytesi tunnus on 7 palvelin versioon: 4.0.24-debug Kirjoita 'help;' tai '\h' saadaksesi apua. Kirjoita '\c' tyhjentääksesi ruudun. mysql> |
Alkuun koitamme luoda uuden tietokannan ”admin”-käyttäjänä. Tällä ”admin”-käyttäjällä on samanlaiset oikeudet kuin MySQL-pääkäyttäjällä, ja se voi tehdä aivan mitä tahansa muokauksia haluaa ”gentoo”-tietokannassa. Tämä testaa käyttäjän pääsyn MySQL:n päätietokantaan. Muista, että annoimme sille oikeudet vain tiettyyn tietokantaan.
Koodilistaus 4.9: Yritys luoda uusi tietokanta |
mysql> CREATE DATABASE gentoo2;
VIRHE 1044: Pääsy kielletty käyttäjältä: 'admin@localhost' to database 'gentoo2'
|
Ja tosiaankin, ”admin”-käyttäjä ei voi luoda tietokantoja MySQL-päätietokantaan, huolimatta kaikista oikeuksista ”gentoo”-tietokannassa. Silti voimme käyttää ”admin”-käyttäjää muokkaamaan ”gentoo”-tietokantaa, niinkuin näytetään tässä esimerkki tiedonlisäyksessä.
Koodilistaus 4.10: "admin"-käyttäjän oikeudet "gentoo"-tietokannassa |
mysql> USE gentoo; Luetaan taulukoiden tietoja taulukoiden ja sarakkeiden nimien loppuunsaattamiseksi. Voit poistaa tämän toimenpiteen ja saada nopeamman käynnistyksen valitsimella -A Database changed mysql> INSERT INTO developers VALUES('Bob Simmons', 'bobsimmons@gentoo.org', 'python'); Kysely onnistui, 1 rivi vaikutusalueella (0.08 sek) |
”Admin”-käyttäjä voi käyttää tietokantaa niinkuin haluaa. Kuitenkin joskus tarvitsee päästä eroon käyttäjän oikeuksista. Tämä voi olla vaikka ongelmallinen käyttäjä tai eläkkeelle jäänyt työntekijä. Katsotaanpa nyt kuinka poistetaan käyttäjän oikeudet REVOKE-komennolla.
Poistetaan käyttäjäoikeuksia REVOKE-komennolla
REVOKE-komennon avulla voimme poistaa käyttäjän oikeudet. Voimme joko poistaa kaikki oikeudet tai vain tietyt. Itseasiassa, sen muodossa on paljon samaa kuin GRANT-komennon.
Koodilistaus 4.11: REVOKE Syntaksi |
REVOKE [privileges] ON database.* FROM '[user]'@'[host]'; |
Valitsimet on selitetty GRANT-komento kappaleessa. Tässä tapauksessa aiomme kuitenkin poistaa kaikki oikeudet käyttäjältä. Sanotaanpa vaikka, että huomasimme ”guest”-käyttäjän aiheuttavan turvallisuusongelmia. Päätämme peruuttaa kaikki oikeudet. Kirjaudumme pääkäyttäjänä ja teemme tarvittavat toimenpiteet.
Koodilistaus 4.12: Peruutetaan käyttäjän oikeudet |
mysql> REVOKE ALL ON gentoo.* FROM 'guest'@'localhost';
Kysely onnistui, 0 riviä vaikutusalueella (0.00 sek)
|
Huomaa: Tässä tapauksessa käyttäjän oikeudet ovat yksinkertaiset, eli yhden tietokannan oikeuksien peruuttaminen ei ole ongelma. Laajemmissa tapauksissa käyttäisit todennäköisemmin *.* kuin nyt käytettyä gentoo.*. |
Nyt kirjaudutaan ulos ja yritetään kirjautua ”guest”-käyttäjänä sisään.
Koodilistaus 4.13: Yritetään "guest"-käyttäjän kirjautumista |
$ mysql -u guest -h localhost -p
Anna salasanasi:
Tervetuloa MySQL:een. Komennot päättyvät joko ; tai \g.
MySQL-yhteytesi tunnus on 4 palvelin versioon: 4.0.24-debug
Kirjoita 'help;' tai '\h' saadaksesi apua. Kirjoita '\c' tyhjentääksesi ruudun.
mysql>
|
Vaikka pystymme kirjautumaan sisään, niin pääsy "gentoo"-tietokantaan on poissa.
Koodilistaus 4.14: Pääsy kielletty "guest"-käyttäjältä |
mysql> USE gentoo;
VIRHE 1044: Pääsy kielletty käyttäjältä: 'guest@localhost' to database 'gentoo'
|
Ja tällä käyttäjällä ei ole enään pääsyä ”gentoo”-tietokantaan. Mutta sinun kannattaa huomata se, että tämä käyttäjä pystyy edelleen kirjautumaan sisään. Tämä sen takia, että hänen tietonsa ovat edelleen MySQL:n päätietokannassa. Katsotaanpa, kuinka käyttäjä poistetaan kokonaan DELETE-komennolla, samoin myös MySQL:n ”user”-taulukosta.
Käyttäjien poistaminen DELETE-komennolla
MySQL:n ”user”-taulukkoon on listattu kaikki käyttäjät ja tiedot heistä. Varmista, että olet kirjautuneena pääkäyttäjänä. Sitten jatka eteenpäin ja siirry MySQL:n päätietokantaan.
Koodilistaus 4.15: Siirrytään käyttämään "mysql"-tietokantaa |
mysql> USE mysql;
Luetaan taulukoiden tietoja taulukon ja sarakkeiden nimien loppuunsaattamiseksi.
Voit poistaa tämän toimenpiteen ja saada nopeamman käynnistyksen valitsimella -A
Tietokantaa vaihdettu
mysql>
|
Katsotaanpa nyt, mitä taulukoita ”mysql”-tietokanta sisältää:
Koodilistaus 4.16: "mysql"-tietokannan taulukoiden listaus |
mysql> SHOW TABLES;
+-----------------+
| Tables_in_mysql |
+-----------------+
| columns_priv |
| db |
| func |
| host |
| tables_priv |
| user |
+-----------------+
6 riviä (0.00 sek)
|
”User”-taulukko on se mitä etsimme. Se kuitenkin sisältää 30 eri saraketta, ja on näin ollen erittäin vaikea luettava. Tehdäksemme sen helpommin luettavaksi, käyttämme kolmatta versiota SELECT-komennosta. Sarakkeet joita haemme, ovat Host ja User.
Koodilistaus 4.17: Etsitään "guest"-käyttäjä "user"-taulukosta |
mysql> SELECT Host,User FROM user WHERE User = 'guest';
+-----------+-------+
| Host | User |
+-----------+-------+
| localhost | guest |
+-----------+-------+
1 riviä (0.00 sek)
|
Nyt kun saimme tiedot, voimme hankkiutua eroon ”guest”-käyttäjästä. Tämä tehdään käyttäen DELETE-komentoa ja sen syntaksi on nähtävillä tämän alapuolella.
Koodilistaus 4.18: DELETE Syntaksi |
DELETE FROM table WHERE field='value'; |
Saatoit huomata, että DELETE-komento on muodoltaan jonkin verran samanlainen kuin SELECT. Tässä tapauksessa sarake on ”User”, ja arvo on ”guest”. Tämä poistaa tietueen ”user”-taulukosta, missä käyttäjä on ”guest”. Tehdäänpä tämä nyt:
Koodilistaus 4.19: Poistetaan "guest"-käyttäjä |
mysql> DELETE FROM user WHERE User='guest'; Kysely onnistui, 1 rivi vaikutusalueella (0.07 sek) (FLUSH PRIVILEGES:tä tarvitaan päivitettäessä käyttäjien oikeuksia) mysql> FLUSH PRIVILEGES; Kysely onnistui, 0 riviä vaikustusalueella (0.00 sek) |
Se näytti toimivan hyvin. Kirjaudutaanpa nyt ulos ja koitetaan kirjautua takaisin ”guest”-käyttäjänä
Koodilistaus 4.20: Yritys kirjautua sisään "guest"-käyttäjän |
mysql> quit Bye $ mysql -u guest -h localhost -p Anna salasanasi: VIRHE 1045: Pääsy kielletty käyttäjältä: 'guest@localhost' (Salasanaa käytetty: KYLLÄ) |
Käyttäjämme on nyt poistettu onnistuneesti!
Tämä ohje keskittyi pääsasiallisesti MySQL:n käyttöön komentoriviltä, mutta saatavilla on vaihtoehtoja GUI-muodossa:
Tähän loppuu MySQL:n esitellyt ohje. Toivon, että tämä auttaa sinua paremmin ymmärtämään MySQL:n perusteet ja saat tietokantasi asennettua. Lähetäthän sähköpostia minulle, Chris White, jos sinulla on jotain kommentoitavaa.
Tämän dokumentin sisältö ja suomennos kuuluu Creative Commons - Nimi mainittava-Sama lisenssi 2.5 -lisenssin piiriin.