Informix Logo


Почему не работет 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


Украинская баннерная сеть
 

[Home]

Сайт поддерживается группой пользователей Информикс на Украине.

Hosted by NO-more.