PhpMyAdmin/Tutoriál

Z Wikiverzity

PhpMyAdmin/Tutoriál

Konfigurace[editovat]

dpkg -L phpmyadmin
  • /etc/phpmyadmin
  • /usr/share/doc/phpmyadmin
    • /usr/share/doc/phpmyadmin/examples/create_tables_mysql_4_1_2+.sql
  • /usr/share/phpmyadmin
    • /usr/share/phpmyadmin/scripts/setup.php
    • /usr/share/phpmyadmin/scripts/create_tables.sql
    • /usr/share/phpmyadmin/libraries/config.default.php – defaultní konfigurace; co se nám nelíbí, to můžeme změnit v /etc/phpmyadmin/config.inc.php

Např:

$cfg['LeftDisplayLogo'] = FALSE;// display logo at top of left frame
$cfg['ShowPhpInfo'] = TRUE;     // show PHP info link
$cfg['ShowBlob'] = TRUE;        // display blob field contents
$cfg['LoginCookieValidity'] = 3600; //validity of cookie login (in seconds) = za jak dlouho budeme odpojeni kvůli neaktivitě (defaultně 1800 sekund)
$cfg['MaxRows'] = 1000;         // maximum number of rows to display
$cfg['RepeatCells'] = 20;       // repeat header names every X cells? (0 = deactivate)
$cfg['LimitChars'] = 500;       // Max field data length in browse mode for all non-numeric fields. Can be turned off by a toggle button on the browse page. (Tak to jsem fakt nenašel, kde se to dá vypnout)

Výsledkem defaultního zobrazení pak bude:

zobrazit 500 řádků začínající od 0
ve vodorovném režimu a opakovat hlavičky po 20 řádcích.

Problém velikosti importovaného souboru[editovat]

Zásadně to ovlivní nastavení PHP, které se konfiguruje v

/etc/php5/apache2/php.ini

Vidíme zakomentované původní hodnoty a pod nimi nastavené nové:

;memory_limit = 16M      ; Maximum amount of memory a script may consume (16MB)
memory_limit = 64M

;post_max_size = 8M
post_max_size = 2000M

;upload_max_filesize = 2M
upload_max_filesize = 4000M

Nedoporučuji zapisovat velké hodnoty jako G, tj. např. namísto 2000M napsat 2G. PhpMyAdmin to sežere v pohodě, ale zanedlouho zjistíme, že nelze ukládat editace v MediaWiki – nejspíš nějaký bug.

I přesto se však stane, že v poli pro zadání vstupního souboru pro import nám phpmyadmin hlásí:

File to import
Location of the text file _________ [Browse...] (Max: 8,192 KiB)
Character set of the file: ________
Imported file compression will be automatically detected from: None, gzip, bzip2, zip

Kde se vzalo to omezení na 8,192 KiB?

Jedna věc je, že po editaci /etc/php5/apache2/php.ini musíme restartovat apache2:

# apache2ctl restart

a poté vidíme, že maximální velikost importovaného souboru se zvětší na 2G. Je to minimální hodnota z výše nastavených.

Kdyby nás to zajímalo, jak to phpmyadmin nastavuje, můžeme hledat v jeho skriptech /usr/share/phpmyadmin a zjistíme, že to, co se zde zobrazuje, je velikost proměnné

$max_upload_size

která se nastaví v knihovně /usr/share/phpmyadmin/libraries/Config.class.php

    /**
     * Maximum upload size as limited by PHP
     * Used with permission from Moodle (http://moodle.org) by Martin Dougiamas
     *
     * this section generates $max_upload_size in bytes
     */
    function checkUploadSize()
    {
        if (! $filesize = ini_get('upload_max_filesize')) {
            $filesize = "5M";
        }

        if ($postsize = ini_get('post_max_size')) {
            $this->set('max_upload_size',
                min(PMA_get_real_size($filesize), PMA_get_real_size($postsize)));
        } else {
            $this->set('max_upload_size', PMA_get_real_size($filesize));
        }
    }

pma tabulky[editovat]

Je to už v tom skriptu /usr/share/doc/phpmyadmin/examples/create_tables_mysql_4_1_2+.sql, ale dá se to udělat i ručně, abychom viděli, jak to proběhne:

jako MySQL root:

CREATE DATABASE `phpmyadmin`  DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
GRANT SELECT, INSERT, DELETE, UPDATE ON `phpmyadmin`.* TO 'pma'@localhost;


cd /usr/share/doc/phpmyadmin/examples mysql -uroot -pheslo_pro_roota < create_tables_mysql_4_1_2+.sql


/etc/phpmyadmin/config.inc.php odkomentuje se:

  • /* Optional: User for advanced features */
  • /* Optional: Advanced phpMyAdmin features */


phpMyAdmin se pokusil připojit k MySQL serveru, a ten odmítl připojení.
Zkontrolujte jméno serveru, uživatelské jméno a heslo v souboru config.inc.php a ujistěte se,
že jsou totožné s těmi, které máte od administrátora MySQL serveru.

Moc nechápu, jak je to s tím nastavením hesla pro pma.

Dříve, než vytvoříme oprávnění pro uživatele 'pma', musíme ho ručně v databázi vytvořit. To lze snadno i z nenakonfigurovaného admina. Při vytváření tohoto uživatele mu také vytvoříme heslo. Toto heslo se pak zapíše do config.inc.php.

Pozor na chybu v phpMyAdminu 2.9 + !! Pokud jej nastavujete pohodlně přes skript (http://***kde je ten adnmin**/scripts/setup.php, tak je zde volba MemoryLimit. tato je nastavena na 32, a na prvni pohled se zdá, že se jedná o veličinu MB, Chyba. Jedná se o bajty. Pokud tedy nic nezměníte, bude tento limit 256kb (nejmenší možná defaultní hodnota) a admin při vykonávání SQLek a jiných náročnějších příkazů stále hlásí překročení povoleného limitu. Čili vyplňujte '32M' nebo '32000000' dle libosti..

pmatabulky podruhé[editovat]

  • V Ubuntu/10.04 je phpMyAdmin Version: 3.3.2deb1 a MySQL Server version: 5.1.41-3ubuntu12.1
  • tam už není skript /usr/share/doc/phpmyadmin/examples/create_tables_mysql_4_1_2+.sql ale create_tables.sql

Problém[editovat]

Po spuštění můžeme obdržet hlášku

The additional features for working with linked tables have been deactivated. To find out why click here.
Connection for controluser as defined in your configuration failed.

a po kliknutí:

$cfg['Servers'][$i]['tracking'] ... 	not OK [ Documentation ]
Tracking: Disabled
 
Connection for controluser as defined in your configuration failed.

Usoudím, že může být problém v pmadb

Najdu

sudo su
cd /usr/share/doc/phpmyadmin/examples
ls
  config.manyhosts.inc.php
  config.sample.inc.php
  create_tables.sql.gz
  signon.php
  upgrade_tables_mysql_4_1_2+.sql.gz
gunzip *.gz
less create_tables.sql

Koukám, v MySQL je user phpmyadmin, ale ne pma. Má to být ten samý?

Ještě čtu:

Takže:

dpkg-reconfigure -plow phpmyadmin

Po novém zalogování do phpmyadmina je ty chybové hlášky stejné jako předtím, takže pokračuji:

pma-configure

Tím pouze odemknu konfigurační skripty.

Jdu na:

Ale dlouho nechápu, co to tady na mě chce za přístupové jméno a heslo. Postupně zkouším, nic z toho nefunguje:

  • root, rootovské pro MySQL server.
  • root, heslo pro ubuntu
  • root, bez hesla
  • admin, bez hesla
  • pma, bez hesla
  • phpmyadmin, bez hesla
  • výše uvedené, s oběma rootovskými hesly

Také nechápu, jaké heslo nastavil předchozí skript pro uživatele phpmyadmin, když se na žádné neptal? Náhodně vygenerované anebo stejné, jako pro roota? Náhodně vygenerované není, pokusem jsem zjistí, že toho uživatele vytvoří a přidělí mu pokaždé stejné heslo.

Aha, tak konečně jsem to objevil. To heslo uživatele pma se nastavilo při první konfiguraci phpmyadminu. Je uložené v /etc/dbconfig-common/phpmyadmin.conf a skriptem dpkg-reconfigure se už nemění! Je to bug?? Ale stejně se s tímhletím heslem do MySQL nedostanu.

Ale uživatel phpmyadmin by tu snad být neměl, protože ta konfigurace by měla jít nastavit i bez pma tabulek, ne?

V následujícím poučení nenajdu:

No tak zedituji /etc/phpmyadmin/config.inc.php ručně

Ne. Zkusím celý phpmyadmin přeinstalovat.

odinstalování phpmyadmin[editovat]

Koukám, i když jsem nechal vymazat databázi phpmyadmin, tak user pma v tabulkách mysql zůstal.

nová instalace[editovat]

  • nastavuji phpmyadmin
    • nastavit pomocí dbconfig-common? Ano. (to je zřejmě utilita na vytváření databází, tabulek a záznamů v mysql)
    • zeptá se rootovské (správcovské) heslo pro MySQL
    • zeptá se na "Aplikační MySQL heslo pro balík phpmyadmin". Prázdné pole=>je náhodné. Bude to to heslo pro pma??
    • na jaký server? apache2
Přednastavuji balíky...
Instaluji balík phpmyadmin.
(Čtu databázi ... nyní je nainstalováno 209479 souborů a adresářů.)
Rozbaluji phpmyadmin (z .../phpmyadmin_4%3a3.3.2-1_all.deb) ...
Zpracování spouštěčů pro balík doc-base ...
Processing 1 added doc-base file(s)...
Registering documents with scrollkeeper...
Zpracování spouštěčů pro balík man-db ...
Nastavuji balík phpmyadmin (4:3.3.2-1) ...
dbconfig-common: writing config to /etc/dbconfig-common/phpmyadmin.conf

Creating config file /etc/dbconfig-common/phpmyadmin.conf with new version

Creating config file /etc/phpmyadmin/config-db.php with new version
granting access to database phpmyadmin for phpmyadmin@localhost: success.
verifying access for phpmyadmin@localhost: success.
creating database phpmyadmin: success.
verifying database phpmyadmin exists: success.
populating database via sql...  done.
dbconfig-common: flushing administrative password
 * Reloading web server config apache2
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
   ...done.

Takže se vytvořila databáze phpmyadmin s userem phpmyadmin. Ale nedá se na toho uživatele zalogovat!

Aha. Už to mám. Bug jak prase. Když heslo obsahuje mezeru, tak se v mysql databázi nastaví jako heslo jen ta část hesla před mezerou, zatímco v /etc/dbconfig-common/phpmyadmin.conf je to heslo celé.

bug report[editovat]

Reportuji na: https://bugs.launchpad.net/ubuntu/+source/dbconfig-common/+filebug

Problem with a password containing space char

Description:	Ubuntu 10.04 LTS
Release:	10.04
dbconfig-common version: 1.8.44ubuntu1

Process of instalation  (for example) phpmyadmin:
* the installation script uses dbconfig-common
* the bug occurs, when choosing any pasword (for phpmyadmin), containing space character, for example aaaa bbbb

In such case:

* /etc/dbconfig-common/phpmyadmin.conf contains the correct line:
dbc_dbpass='aaaa bbbb'

* but the password of the user phpmyadmin in the table mysql/user is truncated and set to 'aaaa'

As the result:
* after logging into phpmyadmin the error appears:
"Connection for controluser as defined in your configuration failed."
* the resulting truncated password which is actually set by dbconfig-common may be VERY WEAK (serious security hole)

I suppose it's bug of dbconfig-common and not a bug of phpmyadmin. (But maybe I'm wrong.)

Workaround:
* You must verify the password in the mysql database and correct it by hand with help of the mysql client.
* don't use passwords containing space character

The next problem:

When attempting to reconfigure the phpmyadmin interactively by means of
# dpkg-reconfigure -plow phpmyadmin
there is no subsequent question about phpmyadmin password. The original (corrupted) password remain unchanged even if the username was changed (for example, from 'phpmyadmin' to 'pma').
The file  /etc/dbconfig-common/phpmyadmin.conf is updated OK, but  the new record in the table mysql/user is created with the same (truncated) password and the old record is still remaining in the table (without the user knowing), which increases the security vulnerability.

Bug dostal číslo 584943



Základní operace[editovat]

Vytvoření databáze a tabulek:

  • ovládání je celkem intuitivní – viz např. phpMyAdmin (2.) - základní používání
  • doporučuji kódování UTF-8 Unicode (utf8), lokace pro češtinu: utf8_czech_ci
  • úložiště:
    • MyISAM – defaultní
    • InnoDB – podporuje transakce aj.

Relace[editovat]

Typickým příkladem jsou tabulky zak a obj (zákazníci a objednávky). V obou tabulkách je sloupec c (číslo zákazníka). Jeden zákazník může mít více objednávek