2013-07-27 1 views
0

Я довольно новый для MySQL и я создание тестовых таблиц и т.д.Пользователь без каких-либо разрешений по-прежнему можно выбрать

Во всяком случае, я создал новый пользователь, используя

CREATE USER 'myUser'@'localhost' IDENTIFIED BY 'myPassword';

Теперь, когда я вхожу в этот пользователь, я могу SELECT из таблицы, которую я создал с помощью root ранее. Неужели это невозможно? Пользователь не имеет разрешений SELECT или даже каких-либо разрешений. Если (вошли в систему с правами администратора) я сделать что-либо:

SHOW GRANTS FOR 'myUser'@'localhost';

Или

SELECT * FROM information_schema.user_privileges WHERE grantee LIKE "'myUser'@%";

Я могу видеть, что они имеют разрешения только ИСПОЛЬЗОВАНИЮ. Мое понимание - это разрешение, указывающее, что у пользователя нет разрешений.

Как этот пользователь может выбрать из моего стола?

Если я:

SELECT * FROM information_schema.table_privileges;

Нет результатов нет.

Что мне здесь не хватает? Некоторые вещи, например, SELECT, неявно предоставленные новым пользователям? Должен ли я явно отменить это?

Если да, то какие другие разрешения неявно предоставляются?

Идеально, на что я нацелен, это пользователь, который ничего не может сделать, кроме запуска одной (или более) хранимых процедур, которые я указываю с помощью GRANT EXECUTE ON.

+0

Возможно, вы точно не знаете, какой пользователь/хост вы подключаете; установите флажок «SELECT CURRENT_USER();». – fenway

+0

Я получаю «myUser @ localhost», что я и ожидал. Однако, если все работает, как я думал, они собираются, не должны ли мне отказывать в разрешениях на это? Чтобы заблокировать все запросы SELECT, в том числе и таблицы,? – Interminable

+0

это не «истинный» SELECT (т. Е. Не доступ к таблице). (USAID) позволяет вам входить на сервер БД, но не намного больше. – fenway

ответ

0

Он никогда даже не приходило в голову, что вы будете создавать производственные таблицы в тестовой схеме - но оказывается, это описано в MySQL refman (курсив добавлен):

Кроме того, mysql.db таблица содержит строки, которые позволяют всем учетным записям получить доступ к базе данных test и другим базам данных с именами, начинающимися с test_. Это справедливо даже для учетных записей, которые в противном случае не имеют специальных привилегий , таких как анонимные учетные записи по умолчанию. Это , удобный для тестирования, но нецелесообразный на производственных серверах. Администраторы, которым нужен доступ к базе данных, ограничены только учетными записями , которые имеют разрешения, предоставленные явно для этой цели, должны удалить эти строки mysql.db.

Так что объясняет вашу находку, что «В любом случае, даже при удалении его, а затем воссоздает его, если он имеет название„тест“, он всегда будет доступен для анонимных пользователей, и т.д.»

0

Во время моего тестирования я создал схему под названием «тест». Неизвестный мне, «тест», на самом деле является своего рода зарезервированным именем схемы базы данных для MySQL. Анонимные пользователи могут его использовать и т. Д.

В результате материал, который я создавал там для тестирования, не имел определенных ограничений разрешений, которые могли бы выполнять другие базы данных.

Я не могу найти какую-либо информацию по этому вопросу за пределами этой страницы: http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips

Эта страница говорит, что это происходит с ним, но я уверен, что моя установка не имеет его по умолчанию.

В любом случае, даже при удалении его, а затем воссоздает его, если он имеет название «тест», он всегда будет доступен для анонимных пользователей и т.д.

Я надеюсь, что это поможет кому-то, я провел слишком много времени озадачивая это!