Любой базе данных, названной тестом или чье имя снабжается префиксом тест, предоставили бы, полный доступ предоставил его для анонимных учетных записей. Согласно Учебнику Сертификации MySQL 5.0 (ISBN 0-672-32812-7), страница 498 рекомендует удаление анонимных учетных записей и тестовой базы данных.
Начиная с той записи MySQL 5.1 имеет mysql.db, заполненный с теми двумя строками. Я не видел, что это зарегистрировало где угодно. Просто выполненный
DELETE FROM mysql.db;
FLUSH PRIVILEGES;
DROP DATABASE test;
и все Ваши заботы закончатся!!!
Воздержитесь от именования любого тестового теста баз данных или test_ <что-либо>
ОБНОВЛЕНИЕ
Нормально совершенно иметь ясный mysql.db, особенно с тестовыми базами данных. MySQL включал тест и тест _ % в mysql.db по умолчанию со всеми полномочиями. Анонимные логины могли поэтому получить доступ к любой тестовой базе данных. Просто дисковое нападение могло повредить mysql установку. Вот пример:
USE test
CREATE TABLE rolando_tb (a int);
INSERT INTO rolando_tb VALUES (1);
INSERT INTO rolando_tb SELECT a FROM rolando_tb;
INSERT INTO rolando_tb SELECT a FROM rolando_tb;
INSERT INTO rolando_tb SELECT a FROM rolando_tb;
INSERT INTO rolando_tb SELECT a FROM rolando_tb;
Выполненный вставляют 30 раз, и Вы получаете таблицу 7GB
Предположите составлять несколько из этих таблиц в тестовой базе данных
Предположите создавать Хранимую процедуру в тестовой базе данных
Возможности бесконечны пока тест и тест _, % существует в mysql.db
Это не документируется. Это должно быть!!!
Это - действительно ошибка в документации в области безопасности Installtion. +1 для ловли этого!!!!!
Я бы установил функцию bash следующим образом:
function suppress { /bin/rm --force /tmp/suppress.out 2> /dev/null; ${1+"$@"} > /tmp/suppress.out 2>&1 || cat /tmp/suppress.out; /bin/rm /tmp/suppress.out; }
Затем вы могли бы просто запустить команду:
suppress foo -a bar
Должно быть достаточно легко написать сценарий для этой цели.
Что-то вроде этого полностью непроверенного сценария.
OUTPUT=`tempfile`
program_we_want_to_capture &2>1 > $OUTPUT
[ $? -ne 0 ]; then
cat $OUTPUT
exit 1
fi
rm $OUTPUT
С другой стороны, для команд, которые я запускаю как часть сценария Обычно мне нужно что-то получше, чем просто распечатать весь вывод. Я часто ограничиваю то, что вижу, неизвестным. Вот сценарий, который я адаптировал из того, что прочитал более десяти лет назад.
#!/bin/bash
the_command 2>&1 | awk '
BEGIN \
{
# Initialize our error-detection flag.
ErrorDetected = 0
}
# Following are regex that will simply skip all lines
# which are good and we never want to see
/ Added UserList source/ || \
/ Added User/ || \
/ init domainlist / || \
/ init iplist / || \
/ init urllist / || \
/ loading dbfile / || \
/^$/ {next} # Uninteresting message. Skip it.
# Following are lines that we good and we always want to see
/ INFO: ready for requests / \
{
print " " $0 # Expected message we want to see.
next
}
# any remaining lines are unexpected, and probably error messages. These will be printed out and highlighted.
{
print "->" $0 # Unexpected message. Print it
ErrorDetected=1
}
END \
{
if (ErrorDetected == 1) {
print "Unexpected messages (\"->\") detected in execution."
exit 2
}
}
'
exit $?
Я не думаю, что есть чистый способ сделать это, единственное, что я могу придумать, это
Реализация этого может быть интересным проектом, но, возможно, выходит за рамки вопросов и ответов.
короткая позиция с чем-то вроде tehcommand &> / tmp / $$ || cat / tmp / $$
зависит от того, насколько удобнее / печатать вы хотите / нуждаетесь. (например, используя его как конвейер или передавая команду по аргументу)
Короткий сценарий @zoredache в основном является для этого прото-оболочкой, которая обеспечивает большую надежность, обеспечивает параллелизм и т. д.
Не изобретайте велосипед. Это распространенная проблема, особенно с заданиями cron, поэтому были созданы хронические
/хронические
. Скорее всего, вы можете установить его из своего менеджера пакетов, и его использование так же просто, как это:
cronic noisy_command --param paramval
Он будет подавлять вывод, если шумная команда не имеет ненулевой статус выхода.