5

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

4

3 回答 3

6

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

于 2013-03-03T18:28:01.583 回答
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。

于 2013-03-03T18:51:42.240 回答
-2

user GRANT CREATE ANY INDEX TO SCHEMA_NAME

于 2016-09-04T13:20:59.087 回答