我的大部分背景来自sql server
,所以我在使用Oracle术语时遇到了困难。
在sql server
中,我创建数据库Sales
,并在Sales
下用create table dbo.MyTable {...}
创建对象。现在,我可以使用select * from Sales.dbo.MyTable
查询该表。在Management Studio
中,我将在dbo.Sales
和Sales
下看到我的表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
,那么我将创建另一个架构。
我知道我的逻辑是错误的,因此可以提供任何帮助。
答案 0 :(得分:2)
您所说的一切都是正确的。
如果您希望用户SALES
包含您的表,为什么不创建它(而是创建了SALESMANAGER
)?
所以:再次以SYS
的身份连接,然后
drop user salesmanager cascade;
CREATE USER sales IDENTIFIED BY mypassword;
grant create session, create table to sales;
不授予不需要的特权。特别是,不要授予DBA(这是一个强大的角色)。如果事实证明您需要其他特权(当然,您会-例如create view
,create 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