Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: GRANT & REVOKE для отдельной таблицы
 
 автор: nv_   (04.08.2005 в 12:41)   письмо автору
 
 

Здраствуйте.
Посоветуйте, как можно модифицировать пермишины для отдельной таблицы в базе (конкретно -- как сделать так. чтоб ее не можно было просматривать командой select).
Очень прошу не цитировать и не скидывать линки мануал (я его уж вдоль и поперек прочесал) а просто вот конкретный пример.
Большущее спасибо.

   
 
 автор: cheops   (04.08.2005 в 13:23)   письмо автору
 
   для: nv_   (04.08.2005 в 12:41)
 

С привилегиями много путаницы - это связано с тем, что привилегии могут быть вставлены на разных уровнях - глобальном, базы данных, таблицы, столбца. Всё ещё усугубляется, что часть привилегий работают только на определённом уровне. Учётную запись можно снабдить привилегией передавать свои полномочия другим, а можно не снабжать... Кроче ваш запрос, может выглядеть следующим образом.
GRANT SELECT ON base.tbl TO 'root'@'localhost' IDENTIFIED BY PASSWORD 'password'

base - база данных
tbl - таблица
root - имя пользователя
localhost - имя хоста, с которого он обращается
password - пароль
Для уже существующего пользователя можно не указывать пароль
GRANT SELECT ON base.tbl TO 'root'@'localhost'

   
 
 автор: nv_   (04.08.2005 в 13:48)   письмо автору
 
   для: cheops   (04.08.2005 в 13:23)
 

Это не то. Мне не нужно определять "селект" привилегию для таблици (это УЖЕ определено привилегией на уровне бд). Наоборот, нужно ЗАПРЕТИТЬ ПРОСМОТР этой самой таблицы.
revoke select on db.tbl_name from dummy_user говорит, что такая привилегия для этой таблици не определена, а
grant usage on db.tbl_name to dummy_user вроде фиксируется, но после flush privileges (либо после reload) show grants for dummy_user не показывает новосозданной привилегии.
В чем причина?

   
 
 автор: cheops   (04.08.2005 в 16:06)   письмо автору
 
   для: nv_   (04.08.2005 в 13:48)
 

USAGE - это ключевое слово, обозначающее полное отсутствие привилегий - из него уже ничего нельзя вычесть - вот если вы ALL дадите, а потом примените REVOKE для SELECT, то останутся
 INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES

и GRANT OPTION в зависимости от того передавалась ли пользователю эта привилегия в дополнение к ALL или нет (ALL включает все привилегии, кроме GRANT OPTION).

   
 
 автор: nv_   (04.08.2005 в 16:50)   письмо автору
 
   для: nv_   (04.08.2005 в 13:48)
 

Хорошо, объясняю задачу, как есть:
пользователю dummy_user для базы one_db даны пермишны ТОЛЬКО для просмотра (только селект). Но в этой базе есть такие таблички, в которые даже смотреть запрещено (пароли там хранятся, в захешированом виде, но все-таки). Соответственно, нужно ЗАПРЕТИТЬ просмотр таблички very_secret_table для dummy_user. Ну а для всех остальных табличек оставить.
?

   
 
 автор: cheops   (04.08.2005 в 22:02)   письмо автору
 
   для: nv_   (04.08.2005 в 16:50)
 

Тогда нужно выставить привилегию USAGE для таблицы very_secret_table

   
 
 автор: nv_   (04.08.2005 в 23:08)   письмо автору
 
   для: cheops   (04.08.2005 в 22:02)
 

Абсолютно хорошая и, главное, правильная мысль :). Проблема в том, что эта привилегия почему-то не вступает в силу. Ну не вступает, блин, в силу, йо-мое! :))
Или я че-то не так делаю, или это в мскл глюк, но и после flush privileges и после reload'a все как было так и есть. Операция селект проходит, так скать, со свистом :).
Попробуй сам, експеримент, знаешь. Выйдет -- с меня пиво (не знаю, виртуальное, что-ли :) ), расскажешь. А то я уже просто потерялся весь.

   
 
 автор: cheops   (04.08.2005 в 23:18)   письмо автору
 
   для: nv_   (04.08.2005 в 23:08)
 

Это абослютно новый пользователь или уже существующий? Нет ли у него глобальных привилегий, которые открывают ему всё и вся?

   
 
 автор: cheops   (04.08.2005 в 23:33)   письмо автору
 
   для: nv_   (04.08.2005 в 23:08)
 

Т.е. с базы данных уберите привилегию SELECT и с глобального уровня, а таблицам либо назначайте либо убирайте её. Пока SELECT, стоит на базе данных, любые манипуляции на уровне таблиц ни к чему не приведут.

   
 
 автор: nv_   (05.08.2005 в 14:17)   письмо автору
 
   для: cheops   (04.08.2005 в 23:33)
 

Во-о-т, в этом и вся проблема: конечно и обязательно, на базу я поставил привилегию select. И естественным путем хотел уточнить привилегии для одной только таблици.
Выходит полная фигня, скажу я тебе. Или я не понима, или привилегии можно уточнять только в большем направленни, но не в меньшем. Так?
А если так, то задача моя теоретически, конечно, разрешима, но практически (36 таблиц * 2) -- не очень. Фиксить 70 записей -- эт, конечно, жестоко.
В любом случае, огромное спасибо за ответ, cheops.

   
 
 автор: cheops   (05.08.2005 в 17:52)   письмо автору
 
   для: nv_   (05.08.2005 в 14:17)
 

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

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования