Oracle:在另一个模式中授予创建表的权限?

13

我有两个用户:Schema1和Schema2

如何将Schema2的创建表权限授权给Schema1?

我已经转了一圈,感到困惑。 我尝试过:

在Schema2中,我尝试过,

GRANT CREATE TABLE TO SCHEMA1 WITH ADMIN OPTION;

但看起来这似乎将创建表授予了Schema1在其自己的模式中而不是在Schema2中。

有任何想法吗?

谢谢。

3个回答

21

允许非DBA用户在另一个模式中创建表的唯一其他方法是授予该用户CREATE ANY TABLE系统特权。

此特权只能由具有CREATE ANY PRIVILEGE特权的用户授予给SCHEMA1


3
更确切地说,拥有“GRANT ANY PRIVILEGE”权限的用户 - 当然,DBA角色具备此权限。 - Wernfried Domscheit
2
那么如果还有Schema3和4,Schema1现在可以在不仅仅是Schema2中创建表,还可以在Schema3和4中创建表了吗? - Wouter
3
这似乎是一个不错的折中解决方案:http://dba.stackexchange.com/questions/13320/grant-create-permission-on-a-specific-schema-in-oracle-11g - Wouter

7
您想要授予“创建任何表”权限:
grant create any table to schema1;
< p> 任意“修饰符”允许在不同于自己模式的表中创建表。

3
更好的解决方案(最小化与CREATE ANY TABLE权限相关的安全威胁...)
  • 在schema2上创建一个过程,该过程将表定义作为“输入”参数(例如p_tab_def的varchar2(4000)类型)。
  • 在内部放置一个execute_immediate(p_tab_def);声明。你必须先检查p_tab_def,以防止其他DDL语句而不是“CREATE TABLE[...]”。 (例如,您可以通过检查前两个单词来使用简单的检查->它必须是“CREATE TABLE”)
  • GRANT EXECUTE ON schema2.procedure_name TO schema1;
这是一个简单的概念...我在我的上一份工作中使用过这样的概念。

1
这仅适用于匿名块。在schema1中通过schema2过程执行“create table”尝试需要在proc开头处添加“AUTHID CURRENT_USER IS”。 - access_granted
1
@access_granted 我认为这只适用于通过角色授予create table权限的情况。如果是直接用户授权,则应该能够在SP DDL中使用authid definer。请参见:https://dev59.com/IKPia4cB1Zd3GeqP5ul1 - cowbert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接