2014-02-13 3 views
5

У меня есть сервер MySQL (версия сервера: 5.1.68-community; версия клиента MySQL: 5.0.51a). Есть ли способ ограничить ВСЕ доступ к информационным_схемам для всех пользователей?MYSQL ограничивает доступ пользователей к информации_schema

Что происходит, так это то, что некоторые сайты клиентов часто взломаются с помощью SQL Injection, и они могут получить структуру базы данных из таблицы/представления information_schema. Разумеется, нам нужно изменить коды PHP, чтобы предотвратить SQL Injection, но все же я хотел бы ограничить доступ к серверу information_schema.

Пожалуйста, наставит меня ... спасибо заранее

ответ

12

The INFORMATION_SCHEMA это виртуальная база данных, которая содержит мета-информацию обо всех базах данных, доступных для текущего пользователя. То есть он динамически создается в соответствии с разрешениями пользователя. Это не настоящая база данных. Вы должны не попытаться изменить права доступа к нему в любом случае - он обновляется динамически в соответствии с состоянием сервера.

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

+1

Большое спасибо за ваш быстрый ответ. Моя проблема не в том, что кто-то компрометирует другого пользователя. Но с помощью SQL Injection любой может вводить оператор sql, например '....% 20union% 20select% 201, group_concat (table_name), 3% 20% 20%% 20information_schema.tables% 20 где% 20table_schema = database()' (взято из фактическая инъекция произошла с моим сайтом) с PHP-кодом и получить структуру текущей базы данных. Я полностью понимаю, что уязвимость в PHP-коде должна быть исправлена, но если мы можем ограничить привилегию SELECT (по крайней мере) для всех пользователей из information_schema, будет более безопасным. – Sujith

+2

Вы должны понимать: если SQL-инъекция _ была успешной_ - тогда нет способа предотвратить использование пользователями собственных разрешений. 'INFORMATION_SCHEMA' - это просто проекция. Если пользователь имеет доступ к некоторым таблицам, то он сделает это, даже не обращаясь к этой базе данных. В вашем случае он просто будет использовать 'SHOW TABLES' –

+1

Вы абсолютно правы, и я полностью согласен с вами ... Что касается образца Injection, с помощью этого они могут получить список таблиц, а затем перейти на другую инъекцию для получения данных, а затем добавить/отредактировать/удалить в этих таблицах, у нас будут проблемы. – Sujith

0

Никто не может запретить доступ к information_schema (пока), но в случае SQL-инъекций через GET запрос, это легко сделать:

RewriteCond %{REQUEST_FILENAME} !handle_error\.php 
RewriteCond %{QUERY_STRING} information_schema 
RewriteRule ^(.*?)   /handle_error.php [R=301,L] 

в вашем .htaccess и это должен сохранить одну головную боль.

Смежные вопросы