Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Привилегии


Автор: Сириус 1.5.2009, 21:37
Здравствуйте.
Я хотел бы узнать, имеется ли возможность скрыть таблицы от списка таблиц в information_schema.tables ?
То есть я хочу, чтоб некоторые таблицы выводились при запросе select table_name from information_schema.tables , 
а некоторые оставались невидимыми. Это возможно? 


Скажем у меня есть сайт, в нем имеются две папки
folder1,
folder2,
я хочу, чтоб в папке folder1 выводился один список таблиц, (в information_schema.tables)
а в папке folder2 - другой список таблиц,

Вообщем, имеется ли возможность такого контроля ?
Мне просто нужно скрыть имена и данные некоторых таблиц (в таблицах tables, columns, ..), даже в случае, если человек будет иметь доступ к базе через sql иньекции к примеру, но я не хочу запрещать доступ к information_schema вообще, я просто хочу скрыть некоторые таблицы.

Автор: Gwire 2.5.2009, 02:31
То есть ты хочешь, чтобы
в таблице TABLE_PRIVILEGES появились записи типа:
Код
INSERT INTO FROM `TABLE_PRIVILEGES`
  VALUES ('user', NULL, 'your_schema', 'your_table', 'SELECT', 'NO')
 smile Незнаю. Сам както мучился...

Другой вопрос
Цитата(Сириус @  1.5.2009,  21:37 Найти цитируемый пост)
человек будет иметь доступ к базе

Какими правами обладает этот человек?
Если этот человек "GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY '***'" то исли он захочет посмотреть - он посмотрит. Вплоть до удаления этих установок. 
А если он "GRANT ALL PRIVILEGES ON other_schema.* TO 'user'@'%' IDENTIFIED BY '***'" то он будет видеть только "information_schema" и "other_schema".
Драйвер MySQL не будет выбирать для него в "TABLES" или "COLUMNS" не разрешенные схемы.



Автор: Сириус 2.5.2009, 03:30
У нас есть таблица information_schema.tables
Если сделать запрос вида SELECT table_name FROM information_schema.tables
то мы получим список всех существующих таблиц из всех баз.
Так вот, мой вопрос очень простой, как можно сделать так, чтобы некоторые таблицы в этом списке не появлялись?
То есть, если запрос выдает 
SELECT table_name FROM information_schema.tables
результат:
table1
table2
table3
table4
table5
table6
---------
И скажем я хочу скрыть таблицу table2, чтоб если кто-то извне, найдя какую-то багу в моем сайте, выполнит SQL иньекцию с запросом
SELECT table_name FROM information_schema.tables
чтоб результат ему выдался такой
table1
table3
table4
table5
table6
---------
То есть, как можете заметить, таблицы table2 нет в списке. 
Так вот, это возможно, или нет?

Автор: Gwire 13.5.2009, 17:53
Исли ты хочешь скрыть свою базу - убери права у всех пользователей на твою базу.
Конечно эта затея очень стрёмная.
А если желаемый объект - таблица...
smile Увы, я с такими примочками не знаком и другие похоже тоже.
Скорее всего такой функции не имеется в MySQL. smile 

Автор: zav74 14.5.2009, 23:38
Если глобально скрыть все права, то можно устанавливать права на каждую из таблиц. У меня есть разграничения по базам-то есть в information_schema база появляется только в том случае, если у пользователя есть какие-то привелегии на нее. Думаю, с таблицами тоже самое.
http://www.mysql.ru/docs/man/Privileges.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)