2014-01-28 6 views
6

У меня есть двух пользователей: Схемы1 и Схемы2Oracle: Grant Создать таблицу в другой схеме?

Как предоставить привилегию Create Table на схеме Schema2?

Я обернулся, и я смутился. Я пробовал:

От SCHEMA2 Я попытался,

GRANT CREATE TABLE TO SCHEMA1 WITH ADMIN OPTION; 

Но, похоже, это дает Создание таблицы SCHEMA1 в своей собственной схеме, а не в SCHEMA2.

Любые идеи, пожалуйста?

спасибо.

ответ

11

Единственный способ, позволяющий пользователю, не являющемуся DBA, создать таблицу в другой схеме, - предоставить пользователю системную привилегию CREATE ANY TABLE.

Эта привилегия может быть предоставлена ​​только SCHEMA1 пользователем с привилегиями администратора.

+3

Точнее, пользователь с привилегией «ГРАНТ ЛЮБАЯ ПРИВИЛЕГИЯ» - роль DBA имеет эту привилегию, конечно. –

+1

Итак, если есть также Schema3 и 4, схема теперь может создавать таблицы не только в schema2, но также в schema3 и 4? – Wouter

+2

Это похоже на хорошее решение среднего уровня: http://dba.stackexchange.com/questions/13320/grant-create-permission-on-a-specific-schema-in-oracle-11g – Wouter

4

Вы хотите предоставить create ANY table:

grant create any table to schema1; 

any «модификатор» позволяет создавать таблицы в другой, чем собственные схемы.

1

Лучшего решения (minimalizes угрозы безопасности, которая поставляется с CREATE ANY TABLE привилегии ...:

Создайте процедуру на SCHEMA2, которая принимает определение таблицы как "в" параметре (p_tab_def в varchar2 (4000)) Внутри поставить оператор execute_immediate (p_tab_def). Сначала вы должны сначала проверить p_tab_def, чтобы защитить себя от других операторов DDL, чем «CREATE TABLE [...]». (Можно использовать простую проверку, проверив первые два слова -> он должен быть «CREATE TABLE»).

Выполнение гранта на schema2.procedure_name для схемы1;

Это простая концепция ... Я использовал такие контенты в своей предыдущей работе.

Удачи вам!

Смежные вопросы