Такой вопросик:
есть user A, user B, user TT
как дать разрешение A и В на
любые действия в схеме user-a ТТ,
но при этом что-бы A ничего не видел в B,
и наоборот, что-бы B ничего не видел в A
Павел
--
Отправлено через сервер Talk.Ru - http://www.talk.ru
Явно или через роль дать пользователям A и B права на необходимые объекты в
схеме TT. Т.е. выдать кучу грантов.
Ты, небось, хотел через системные привилегии вопрос решить? Что-то вроде
GRANT SELECT ALL TABLES и иже с ним? Не выйдет! Самое верное - создать
специальную роль, коей назначить все объектные гранты на TT, и эту роль
назначать и существующим, и будущим пользователям.
Успехов!
Дмитрий Куликов
DK> "Pavel" <uni...@aria.mldnet.com> wrote in message
DK> news:9o51f4$dli$1...@host.talk.ru...
DK>> Такой вопросик:
DK>> есть user A, user B, user TT
DK>>
DK>> как дать разрешение A и В на
DK>> любые действия в схеме user-a ТТ,
DK>> но при этом что-бы A ничего не видел в B,
DK>> и наоборот, что-бы B ничего не видел в A
DK> Явно или через роль дать пользователям A и B
DK> права на необходимые объекты в
DK> схеме TT. Т.е. выдать кучу грантов.
DK> Ты, небось, хотел через системные привилегии
DK> вопрос решить? Что-то вроде
DK> GRANT SELECT ALL TABLES и иже с ним? Не выйдет!
DK> Самое верное - создать
DK> специальную роль, коей назначить все объектные
DK> гранты на TT, и эту роль
DK> назначать и существующим, и будущим
DK> пользователям.
насчет уже существующих объектов согласен.
А можно ли так дать привелегии, чтобы и A и B
могли создавать(!) объекты в TT (DDL и DML), но немогли
ни DML ни DDL в схемах друг-друга (А в В и В в А)?
Павел
Я так понимаю, что DML оперирует с уже существующими объектами,
следовательно - можно. Это те же самые привилегии, о которых речь велась
выше.
А вот насчёт DDL - нельзя. Так как для создания объектов в чужих схемах
нужны системные привилегии типа CREATE ANY TABLE, и ограничить разрешённые
схемы в этом случае будет невозможно. (Я не рассматриваю триггера на
создание объектов, появившиеся в 8i - может, они спасут отцов русской
демократии? :))
Удачи!
Дмитрий Куликов
DK> Я так понимаю, что DML оперирует с уже
DK> существующими объектами,
DK> следовательно - можно. Это те же самые
DK> привилегии, о которых речь велась
DK> выше.
DK> А вот насчёт DDL - нельзя. Так как для создания
DK> объектов в чужих схемах
DK> нужны системные привилегии типа CREATE ANY TABLE,
DK> и ограничить разрешённые
DK> схемы в этом случае будет невозможно.
все понял, спасибо
DK> (Я не
DK> рассматриваю триггера на
DK> создание объектов, появившиеся в 8i - может, они
DK> спасут отцов русской
DK> демократии? :))
Очень может быть.
Не подскажите-ли как их навешивать
(я рассматривал такой вариант но думал что
тригеров на DDl операции нет)
Павел
В схеме TT создайте процедуру типа:
CREATE OR REPLACE PROCEDURE exec_sql
(sql_in IN VARCHAR2)
IS
BEGIN
EXECUTE IMMEDIATE sql_in;
END exec_sql;
Если Oracle меньше чем 8i, то тоже самое через DBMS_SQL.
Выдайте пользователю TT прямые (не через роль) привилегии CREATE TABLE, ...
на те команды, которые хотите выполнять.
Выдайте пользователям A и B право на выполнение EXEC_SQL.
Теперь можете от имени A и/или B:
SQL> exec tt.exec_sql('create table z (n number)');
PL/SQL procedure successfully completed.
SQL> exec tt.exec_sql('drop table z');
PL/SQL procedure successfully completed.
-----
Павел Лузанов
PL> В схеме TT создайте процедуру типа:
PL> CREATE OR REPLACE PROCEDURE exec_sql
PL> (sql_in IN VARCHAR2)
PL> IS
PL> BEGIN
PL> EXECUTE IMMEDIATE sql_in;
PL> END exec_sql;
PL> Если Oracle меньше чем 8i, то тоже самое через
PL> DBMS_SQL.
PL> Выдайте пользователю TT прямые (не через роль)
PL> привилегии CREATE TABLE, ...
PL> на те команды, которые хотите выполнять.
PL> Выдайте пользователям A и B право на выполнение
PL> EXEC_SQL.
PL> Теперь можете от имени A и/или B:
PL> SQL> exec tt.exec_sql('create table z (n
PL> number)');
PL> PL/SQL procedure successfully completed.
PL> SQL> exec tt.exec_sql('drop table z');
PL> PL/SQL procedure successfully completed.
спасибо.
Именно на этот вариант мы уже набрели.
Павел