Как назначить пользователя только одному табличному пространству? - 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
схема, так как этот пользователь должен иметь возможность создавать таблицы только по собственной схеме.