Database 创建用户,那么现在谁拥有创建的表?

Database 创建用户,那么现在谁拥有创建的表?,database,oracle,plsql,oracle11g,schema,Database,Oracle,Plsql,Oracle11g,Schema,我的大部分背景都来自sql server,因此我在学习Oracle术语时遇到了困难 在sql server中,我使用create table dbo.MyTable{…}创建数据库Sales,并在Sales下创建对象。现在我可以使用select*从Sales.dbo.MyTable查询这个表。在managementstudio中,我将在Sales和表下查看我的表dbo.Sales。很明显,这些物品与销售有关 我正试图对甲骨文做同样的事情。显然,模式发生了什么变化 因此,在安装OracleXe11

我的大部分背景都来自
sql server
,因此我在学习Oracle术语时遇到了困难

sql server
中,我使用
create table dbo.MyTable{…}
创建数据库
Sales
,并在
Sales
下创建对象。现在我可以使用
select*从Sales.dbo.MyTable
查询这个表。在
managementstudio
中,我将在
Sales
表下查看我的表
dbo.Sales
。很明显,这些物品与销售有关

我正试图对甲骨文做同样的事情。显然,模式发生了什么变化

因此,在安装OracleXe11.2之后,我能够使用用户
sys
登录到SID
XE

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

CREATE USER salesmanager IDENTIFIED BY mypassword;
GRANT CONNECT, RESOURCE, DBA TO salesmanager;
现在我有了一个用户和一个名为
SALESMANAGER
的空模式。我以
SALESMANAGER
的身份登录,然后创建了表
Totals
。现在,该表位于schema
SALESMANAGER

我不想让他们处于那种模式下;我希望它们属于
销售
。如果我创建另一个用户
SALES
,那么我将创建另一个模式


我知道我的逻辑是错误的,所以非常感谢您的帮助。

您所说的一切都是正确的

如果您希望user
SALES
包含您的表,为什么不创建它(而是创建
SALESMANAGER

所以:再次连接为
SYS
,然后

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

grant create session, create table to sales;
不要授予你不需要的特权。特别是,不要授予DBA(这是一个强大的角色)。如果结果表明您需要额外的特权(当然您会-例如
创建视图
创建序列
,…),请授予它们

现在,连接为
sales
并创建
totals

如果要保留
salesmanager
用户,请不要放弃它。然后,用户
sales
可以将其表上的某些特权授予其他用户-
salesmanager
包括在内。连接为
销售

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

谢谢但是我不会有一个空的模式
salesmanager
(与用户相反),我永远不会使用它吗?是的。这就是为什么我问你为什么要创建它,如果你不需要它。我需要用户
salesmanager
,但我不需要模式
salesmanager
。模式=用户(+其对象)。你不能拥有你想要的。我想我的思维过程是偏向sql server的:这就像创建几个空数据库(即SALESMANAGER、JOE、RALPH、SALES),这样他们就可以调用SALES中的所有表。如果你想要SALES中的表,那么创建一个名为SALES的用户,并使用它来创建表。然后他们将在
SALES
中,而不是
SALESMANAGER
中。