我的大部分背景知识都来自 sql server
,因此我在使用 Oracle 术语时遇到了困难。
在sql server
中,我创建数据库Sales
并使用create table dbo.MyTable {... }
。现在我可以使用 select * from Sales.dbo.MyTable
查询该表。在 Management Studio
中,我将在 Sales
和 Tables
下看到我的表 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
包含您的表,为什么不创建它(而是创建 SALESMANAGER
)?
所以:再次以 SYS
身份连接,然后
drop user salesmanager cascade;
CREATE USER sales IDENTIFIED BY mypassword;
grant create session, create table to sales;
不要授予您不需要的权限。特别是,不要授予 DBA(这是一个强大的角色)。如果事实证明您需要额外的权限(当然您会需要 - 例如创建 View
、创建序列
...),请授予它们。
现在,以 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;
作为销售经理
连接:
select * From sales.totals; --> precede table name with its owner
关于database - 创建了用户,那么现在谁拥有创建的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56570382/