|
| |
Почему не работет GRANT после REVOKE?
Войти в dbaccess как DBA-пользователь (не DBO!!!)
========================================================
grant dba to <USERNAME>;
revoke ALL on <TABLENAME> from <USERNAME>;
grant select on <TABLENAME> to <USERNAME> ;
========================================================
302: No GRANT option or illegal option on multi-table view.
При этом БД должна быть достаточно сложная ибо на простой однотабличной
дурилке картонной все проходит нормально, а поймать при каких условиях
начинает глючить -- неполучилось. Причем, если скрипт выполнять от DBO, то
все нормально, а если создать DBA и выполнить скрипт от его имени, то
получается что-то странное. Причем, если выполнить
========================================================
grant dba to <USERNAME>;
revoke ALL on <TABLENAME> from <USERNAME>;
grant select on <TABLENAME> to <USERNAME> as <DBO_NAME> ;
========================================================
то все проходит нормально.
Это у меня какой-то глюк в системном словаре или у вас тоже что-то подобное
наблюдается?
В принципе вся проблема возникла из за смешения стилей (Informix фичи и
SQL-89 ) ну и маниакальной Informix security ::).
Давай попробуем с начала.
>
> Войти в dbaccess как DBA-пользователь (не DBO!!!)
>
> ========================================================
> grant dba to <USERNAME>;
Пользуешся возможностями Informix, т.е. путем нормального
SQL идти не хочешь ;) И в данном случае эта команда значения вообще
не имеет, так как ты уже работаешь под dba, а на выдачу прав на таблицы,
эта команда влияния не оказывает ;-))
> revoke ALL on <TABLENAME> from <USERNAME>;
В данном случае Informix пользуется твоими правами как dba, к тому
же в забирании прав особой беды нет, да собственно и записи о правах
нет, так что сплошная симуляция :))
> grant select on <TABLENAME> to <USERNAME> ;
А вот тут, ты глубоко не прав. Так как ты не владелец базы данных, а
всего лишь простой dba, которым тебя сделал "grant dba to", то
с точки зрения SQL-89 ты никто и никаких прав на выдачу grant не
имеешь :)))) И Informix эту з@дрочку не убирает с самых первых версии,
где только гранты появились :(
Чтобы совершить последний оператор, иметь dba недостаточно, ты еще
должен иметь права на выдачу прав на эту таблицу (SQL-89,92)
grant all on <TABLENAME> to <psevdo_dba> with grant option;
либо сослаться на того ("as"), от кого ты даешь права, в этом случае
опять работает твое grant dba.
Правда твое grant select будет работать только для ODBC, насколько я
помню, а так твой юзер все равно будет иметь dba привелегии :))
> ========================================================
>
> 302: No GRANT option or illegal option on multi-table view.
Сообщение правда могло бы быть посодержательнее.
[skip]
>
> При этом БД должна быть достаточно сложная ибо на простой
однотабличной
> дурилке картонной все проходит нормально,
Будет работать и на "дурилке картонной", просто лучше два стиля передачи
прав не смешивать, иначе потом выгребаться тяжело :))
[skip]
> grant select on <TABLENAME> to <USERNAME> as <DBO_NAME> ;
или другой dba у которого есть права на выдачу грантов.
>
> то все проходит нормально.
у DBO эти права ессественно по умолчанию.
>
> Это у меня какой-то глюк в системном словаре или у вас тоже что-то
подобное
> наблюдается?
Да не глюк это, а эээ... смотри выше .
Вообще IMHO при количестве юзеров больше 10 намного лучше пользоваться
ролями с многих точек зрения.
С регарсами,
Евгений
Informix Guide to SQL. Syntax.
SQL Statements
GRANT
.....
DBA:
Has all the capabilities of the Resource privilege as well as the
ability to perform the following functions:
Grant any database-level privilege, including the DBA privilege,
to another user
Grant any table-level privilege to another user
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ---????
.....
Хм, однако в доке они утверждают что DBA может смело грантить любые
table-level privilege.
Странно все это как-то, и не логично ("... смешались в кучу кони, люди И
залпы тысячи орудий слились в протяжный вой ... " (с) Лермонтов). Видимо баг
в доке.
--
Regards,
Dmitry Krivosheyenko
E-mail: ulisse@formweb.com
ICQ UIN:17396761
|