如何将一个用户分配给一个表空间? - 甲骨文 11g

How to assign a user just to one tablespace? - Oracle 11g

安装新数据库时,最好创建一个新用户和一个新 table 空间,因为创建 table 不应该使用 SYS/SYSTEM or/and 在 table 空间 "SYSTEM".

所以我使用以下命令创建了用户 "alex" 和 table 空间 "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" table 空间中。

为什么?因为当他想要访问 table 时,他不应该总是提到 table 空间 "alexData"。

否则他总是需要像这样提到它:

SELECT *
FROM alexData.table

但我希望他总是在那个 table空间里,这样他就不需要提及它了:

SELECT *
FROM table;

这可能吗?

您不能在 SYSSYSTEM 拥有的 table 上创建触发器,请参阅:

Why cannot I create triggers on objects owned by SYS?

如果您要在其上创建触发器的 table 是您创建的 table,它应该存在于 ALEX 架构中。此架构应有权在同一架构中创建的 table 上创建触发器。正如前面评论中提到的,您应该从 ALEX 架构中撤销 CREATE ANY TABLE 特权,因为该用户应该只能在他们自己的架构上创建 table。

首先,@Mat 所说的后果,你不能像

SELECT * FROM alexData.table_SELECT * FROM alex.table_,因为 table 可能以架构名称为前缀。您可能会注意到,您不能使用 table,这是 oracle 的关键字,作为 table 名称,所以我使用 table_ 代替。

创建用户时,会在 table 空间内自动创建对象。例如,当 create table ... 语句发出时,如果您 createalter 您的用户使用 DEFAULT TABLESPACE 短语,则无需提及 table 空间:

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

ALTER USER alex IDENTIFIED BY alex321
DEFAULT TABLESPACE alexData;