【问题标题】:Create table on another schema在另一个模式上创建表
【发布时间】:2013-03-03 18:04:33
【问题描述】:

情况是user1给user2权限:

GRANT CREATE ANY TABLE, SELECT ANY TABLE TO user2;

登录 user2 后,我正在尝试创建表:

CREATE TABLE user1.test(id NUMBER PRIMARY KEY);

结果是ORA-01031 - insufficient privileges 我可以在自己的架构上创建表并从其他架构中选择表。我认为CREATE ANY TABLE 解决了这个问题,但它看起来不同。啊,两个用户都有无限的表空间。我还应该保证什么?

【问题讨论】:

    标签: oracle oracle11g


    【解决方案1】:

    也许您还需要授予CREATE ANY INDEX?添加主键时,您正在创建索引。您可以通过省略 PK 约束来快速测试这一点。

    【讨论】:

      【解决方案2】:

      “创建任何表”的权限太强大了,不能授予非 DBA 的权限。更好的方法是在目标模式中创建一个“创建表”过程,该过程接受所需 DDL 的净化组件,并将执行权限授予所需用户。

      一个合适的接口应该是...

      create procedure
        create_table(
          table_name varchar2,
          columns    varchar2,
          etc        varchar2)
      

      ...这样你就可以...

      begin
        user1.create_table(
          table_name => 'TEST',
          columns    => 'id NUMBER PRIMARY KEY',
          etc        => '');
      end;
      

      ...并让过程为您构建并执行 DDL。

      【讨论】:

        【解决方案3】:

        用户 授予为 SCHEMA_NAME 创建任何索引

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-28
          • 1970-01-01
          • 1970-01-01
          • 2018-05-05
          • 1970-01-01
          相关资源
          最近更新 更多