如何将用户分配到一个表空间? - Oracle 11g

时间:2018-03-13 13:31:09

标签: database oracle oracle11g database-administration

安装新数据库时,最佳做法是创建新用户和新表空间,因为不应使用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 个答案:

答案 0 :(得分:1)

您无法在SYSSYSTEM拥有的表格上创建触发器,请参阅:

Why cannot I create triggers on objects owned by SYS?

如果您要创建触发器的表是您创建的表,它应该位于ALEX架构上。此模式应具有在同一模式中创建的表上创建触发器的权限。如前面在评论中所述,您应该从CREATE ANY TABLE模式撤消ALEX权限,因为此用户应该只能在自己的模式上创建表。

答案 1 :(得分:1)

首先,@ Matt告诉你的结果,你不能像

一样使用

SELECT * FROM alexData.table_SELECT * FROM alex.table_,因为表格可能以模式名称为前缀。正如您可能注意到的那样,您不能将table(这是oracle的关键字)用作表名,因此我使用table_代替。

创建用户时,将在该表空间内自动创建对象。例如,在发出create table ...声明时,无需提及您createalter您的用户使用DEFAULT TABLESPACE短语提供的表空间:

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

OR

ALTER USER alex IDENTIFIED BY alex321
DEFAULT TABLESPACE alexData;