分配一个 table 给一个用户 (oracle, sql plus)

Assigning a table to a user (oracle, sql plus)

我刚刚创建了一个名为 ugestion 的用户(我以 SYSTEM 身份登录)。我怎样才能让他管理我的 table tblinstituciones?我只是想让他控制那个特定的 table。哪个是正确的命令?似乎什么都行不通,我不想放 "GRANT ALTER ANY TABLE TO ugestion" 因为我只是希望他只能管理那个特定的。 我是否需要在执行该命令之前给用户一些特殊权限?而且,我应该执行什么命令? 我之前执行过一些命令,例如 "GRANT ALTER TABLE ON tblinstituciones TO ugestion ; " 但它没有用。我从 oracle、sqlplus.

开始

删除 table。

重新创建它,但在您的 CREATE TABLE 命令中,在 table 名称前加上您的用户名...a la

Create Table Scott.Whosebug (
 A Integer,
 B Varchar2(20),
 C Clob);

如果 SCOTT 是 schema/user,您希望 table 也属于您,当然用您的原始 DDL 替换实际的 DDL。

你也可以...

 CREATE TABLE SCOTT.Whosebug AS SELECT * FROM ORIGINAL_TABLE;

CTAS 不会抓取列注释、约束、索引等内容

现在他们拥有 table。他们可以用它做任何他们想做的事。这是他们的。他们可以放弃它。他们可以改变它。他们可以 insert/update/delete/truncate 它。他们可以将权限授予其他人。

你永远不应该在 SYSTEM 架构(或 SYS!)中创建对象,以获得它的价值。

第一个:

以 SYSTEM 身份登录后,发出以下命令:

DROP TABLE SYSTEM.TBLINSTITUCIONES;

这将删除您在 SYSTEM 架构中创建的 table。正如其他人所提到的,您不应在 SYSTEM 或 SYS 架构中创建 tables 或其他对象。

下一个:

注销 SYSTEM 帐户。

下一个:

以 UGESTION 用户身份登录。

下一个:

CREATE TABLE UGESTION.TBLINSTITUCIONES
  (put all your field definitions here);

将 "put all your field definitions here" 替换为您需要在此 table 中创建的任何字段的定义。在您执行此操作之前,上面的语句将不起作用。

祝你好运。

系统用户不应该用于任何用户对象。请做:

create table ugestion.tblinstituciones as select * from system.tblinstituciones;
drop table system.tblinstituciones;

这样 table 定义和数据都将从系统移动到用户模式(实际上您使用新架构中的数据创建新 table)。