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

标签 database oracle plsql oracle11g schema

我的大部分背景知识都来自 sql server,因此我在使用 Oracle 术语时遇到了困难。

sql server中,我创建数据库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 包含您的表,为什么不创建它(而是创建 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/

相关文章:

mysql - SSRS多个数据库源要加入

sql - 在数据周期内有条件地增加字段值 - 有没有一种仅使用 SQL 的方法?

sql - 如何自动终止事件 session ?

sql - 什么是数据库关闭?

php - 使用 PEAR 处理数据库。向用户显示的数据库错误。如何停止?

php - 在php中从数据库填充多个下拉列表

oracle - 用于集成测试的嵌入式或托管 Oracle 实例

sql - T-SQL 的表级差异和同步过程

java - 显示 SDO_GEOMETRY 类型属性的值

oracle - 丢弃一个非常烦人的触发器