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

Created user, so now who owns the tables created?

我的大部分背景知识来自 sql server,所以我在 Oracle 术语方面遇到了困难。

sql server 中,我创建了数据库 Sales 并使用 create table dbo.MyTable {...}Sales 下创建了对象。现在我可以用 select * from Sales.dbo.MyTable 查询这个 table。在 Management Studio 中,我会在 SalesTables 下看到我的 table dbo.Sales。很明显,这些对象与销售相关。

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

因此,在安装 Oracle XE 11.2 之后,我能够使用用户 sys.

登录到 SID XE

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

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

现在我有一个用户和一个名为 SALESMANAGER 的空模式。我以 SALESMANAGER 身份登录,然后创建了 table Totals。现在 table falls 在架构 SALESMANAGER.

我不想要他们在那个模式下;我希望它们属于 SALES。如果我创建另一个用户 SALES,那么我将创建另一个架构。

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

你说的都是对的。

如果您希望用户 SALES 包含您的 table,您为什么不创建它(而是创建了 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 table。

如果你想保留 salesmanager 用户,请不要放弃它。然后,用户 sales 可以将其 table 的某些权限授予其他用户 - 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