在另一个模式上创建表

时间:2013-03-03 18:04:34

标签: oracle oracle11g

情况是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解决了这个问题,但它看起来是另一回事。啊,两个用户都有无限的表空间。我还应该保证什么?

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

"创建任何表格"授予非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。

答案 2 :(得分:-1)

用户 授予SCHEMA_NAME

的任何索引