Как назначить пользователя только одному табличному пространству? - Oracle 11g

При установке новой базы данных рекомендуется создать нового пользователя и новое табличное пространство, потому что создавать таблицы не следует с помощью SYS/SYSTEM или / и в табличном пространстве "SYSTEM".

Поэтому я создал пользователя "alex" и табличное пространство "alexData" с помощью следующих команд:

CREATE TABLESPACE alexData datafile 'C:/oraclexe/alexData.dbf'
size 100M;
ALTER USER alex QUOTA UNLIMITED ON alexData;
ALTER USER alex QUOTA 0 ON SYSTEM;

Я хочу добиться, чтобы пользователь "alex" мог сохранять свои данные только в табличном пространстве "alexData".

Зачем? Потому что, когда он хочет получить доступ к таблице, ему не всегда нужно упоминать табличное пространство "alexData".

в противном случае он всегда должен будет упомянуть это так:

SELECT *
FROM alexData.table

но я хочу, чтобы он всегда был ТОЛЬКО в этом табличном пространстве, поэтому ему не нужно упоминать об этом:

SELECT *
FROM table;

Это возможно?

2 ответа

Решение

Прежде всего, следствие того, что @Mat сказал, вы не можете использовать как

SELECT * FROM alexData.table_ но SELECT * FROM alex.table_, так как таблица может иметь префикс с именем схемы. Как вы можете заметить, вы не можете использовать table, которое является ключевым словом для оракула, в качестве имени таблицы, поэтому я использовал table_ вместо.

Когда вы создаете пользователя, объект автоматически создается внутри этого табличного пространства. Как пример, когда create table ... В заявлении нет необходимости упоминать табличное пространство при условии, что вы create или же alter ваш пользователь с DEFAULT TABLESPACE фраза:

CREATE USER alex IDENTIFIED BY alex321
DEFAULT TABLESPACE alexData
TEMPORARY TABLESPACE alexTempData;

ИЛИ ЖЕ

ALTER USER alex IDENTIFIED BY alex321
DEFAULT TABLESPACE alexData;

Вы не можете создавать триггеры для таблицы, принадлежащей SYS, или же SYSTEM увидеть:

Почему я не могу создать триггеры для объектов, принадлежащих SYS?

Если таблица, для которой вы хотите создать триггер, является таблицей, которую вы создали, она должна жить на ALEX схемы. Эта схема должна иметь привилегии для создания триггеров для таблиц, созданных в той же схеме. Как уже упоминалось в комментариях, вы должны отменить CREATE ANY TABLE привилегия от ALEX схема, так как этот пользователь должен иметь возможность создавать таблицы только по собственной схеме.

Другие вопросы по тегам