Nejnovější:
- Sailfish OS and memory
- Hillshade tile server
- Statistics of OSM Scout for Sailfish OS
- Nebezpečný router
- Tree model with Silica components
Podle data:
- listopad 2021
- leden 2019
- prosinec 2017
- prosinec 2016
- květen 2014
- duben 2014
- listopad 2013
- duben 2013
- duben 2011
- únor 2011
- leden 2011
- srpen 2010
- květen 2010
- březen 2010
- leden 2010
- říjen 2009
- duben 2009
- únor 2009
- říjen 2008
- září 2008
- srpen 2008
- duben 2008
- březen 2008
- únor 2008
Téma:
Znovuvytvoření MySQL pohledů
23.04.2011
::
téma:
Linux
Dnes jsem se pustil do pročištění loginů ve firemní MySQL databázi a omezení přístupu na nejmenší nutnou množinu. Ukázalo se že odebrání uživatele z databáze není tak jednoduché jak se na první pohled zdálo. Po odebrání uživatelů po nich zbylo hodně pohledů, ke kterým nelze přistupovat.
mysql> select * from userView; ERROR 1449 (HY000): The user specified as a definer ('user'@'192.168.100.0/255.255.252.0') does not exist
Takových pohledů máme v databázi hodně a aplikace na nic závisí. Prolezl jsem internet tam a zpět a nenašel jsem žádný jednodušší způsob jak pohledy přidělit jinému vlastníkovi než je dropnout a vytvořit znova…
Výsledkem mé lenosti je tento script:
#!/bin/bash password=mySecretPassword db=$1 mkfifo /tmp/mypipe 1>/dev/null 2>&1 echo "show tables; " | mysql -p$password --user=root --host=localhost $db \ | tail -n +2 | while read table ; do if [ `mysqldump -v -f -p$password --user=root --host=localhost --extended-insert=TRUE $db $table > /dev/null 2>/tmp/mypipe | grep -c error /tmp/mypipe` -gt 0 ] ; then echo "-- DB $db TABLE $table " sql=`echo "show create table \\\`$table\\\`; " | mysql -p$password --user=root --host=localhost $db \ | grep VIEW | sed "s/^[^(]*\\\`$table\\\` AS //"` echo "DROP VIEW `$table`; CREATE VIEW `$table` AS "$sql";" fi done
Výstup:
./mysql_find_bad_views.sh myDB -- DB myDB TABLE userView DROP VIEW `userView`; CREATE VIEW `userView` AS (select * from table);
Ten pak stačí vzít a po kontrole vložit do MySQL konzole…