已创建用户,那么现在拥有创建表的人是谁?

时间:2019-06-12 21:07:50

标签: database oracle plsql oracle11g schema

我的大部分背景来自sql server,所以我在使用Oracle术语时遇到了困难。

sql server中,我创建数据库Sales,并在Sales下用create table dbo.MyTable {...}创建对象。现在,我可以使用select * from Sales.dbo.MyTable查询该表。在Management Studio中,我将在dbo.SalesSales下看到我的表Tables。显然,这些对象与Sales相关。

我正在尝试对Oracle做同样的事情。显然,everything can reside under the same database和架构有什么变化。

因此,在安装Oracle XE 11.2之后,我可以使用用户XE登录到SID sys

使用sys登录后,我创建了一个SALESMANAGER用户并授予了权限:

CREATE USER salesmanager IDENTIFIED BY mypassword;
GRANT CONNECT, RESOURCE, DBA TO salesmanager;

现在我有一个用户和一个名为SALESMANAGER的空模式。我以SALESMANAGER的身份登录,然后创建了表Totals。现在,表掉落在模式SALESMANAGER下。

我不希望他们采用这种模式;我希望他们属于SALES。如果我创建另一个用户SALES,那么我将创建另一个架构。

我知道我的逻辑是错误的,因此可以提供任何帮助。

1 个答案:

答案 0 :(得分:2)

您所说的一切都是正确的。

如果您希望用户SALES包含您的表,为什么不创建它(而是创建了SALESMANAGER)?

所以:再次以SYS的身份连接,然后

drop user salesmanager cascade;
CREATE USER sales IDENTIFIED BY mypassword;

grant create session, create table to sales;

不授予不需要的特权。特别是,不要授予DBA(这是一个强大的角色)。如果事实证明您需要其他特权(当然,您会-例如create viewcreate sequence等),请授予它们。

现在,以sales身份连接并创建totals表。

如果您想保留salesmanager用户,请不要删除它。然后,用户sales可以将其表上的某些特权授予其他用户-包括salesmanager。以sales连接:

create table totals (id number, total number);
insert into totals (id, total) values (1, 100);
grant select on totals to salesmanager;

salesmanager连接:

select * From sales.totals;    --> precede table name with its owner