Latest:
- Sailfish OS and memory
- Hillshade tile server
- Statistics of OSM Scout for Sailfish OS
- Nebezpečný router
- Tree model with Silica components
By month:
- November 2021
- January 2019
- December 2017
- December 2016
- May 2014
- April 2014
- November 2013
- April 2013
- April 2011
- February 2011
- January 2011
- August 2010
- May 2010
- March 2010
- January 2010
- October 2009
- April 2009
- February 2009
- October 2008
- September 2008
- August 2008
- April 2008
- March 2008
- February 2008
Topic:
Znovuvytvoření MySQL pohledů
23.04.2011
::
topic:
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…