【问题标题】:Created user, so now who owns the tables created?创建用户,那么现在谁拥有创建的表?
【发布时间】:2019-10-27 10:49:16
【问题描述】:

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

sql server 中,我创建数据库Sales 并在Sales 下使用create table dbo.MyTable {...} 创建对象。现在我可以用select * from Sales.dbo.MyTable 查询这个表。在Management Studio 中,我将在SalesTables 下看到我的表dbo.Sales。很明显,这些对象与 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 登录,然后创建了表Totals。现在表落在架构SALESMANAGER下。

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

我知道我的逻辑是错误的,因此非常感谢任何帮助。

【问题讨论】:

  • 如果您想要SALES 中的表,然后创建一个名为SALES 的用户并使用它来创建表。然后他们将在SALES 而不是SALESMANAGER

标签: database oracle plsql oracle11g schema


【解决方案1】:

你说的都是对的。

如果您希望用户 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

【讨论】:

  • 谢谢。但是我不会有一个我永远不会使用的空模式salesmanager(与用户相反)吗?
  • 是的。这就是为什么我问你为什么要创建它,如果你不需要它。
  • 我需要用户 salesmanager,但我不需要架构 salesmanager
  • 架构 = 用户(+ 其对象)。你不能拥有你想要的。
  • 我想我的思维过程偏向于 sql-server:这就像创建几个空数据库(即。SALESMANAGERJOE RALPH, SALES) 以便他们调用所有查看 SALES 中的表。
猜你喜欢
  • 1970-01-01
  • 2021-03-11
  • 2014-06-25
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
相关资源
最近更新 更多