我有两个用户:Schema1和Schema2
如何将Schema2上的Create Table权限授予Schema1?
我一直在转身,我感到困惑 . 我试过了 :
从Schema2我试过,
GRANT CREATE TABLE TO SCHEMA1 WITH ADMIN OPTION;
但似乎这会在自己的Schema中为Schema1创建表,而不是在Schema2中 .
有什么想法吗?
谢谢 .
你想授予 create ANY table :
create ANY table
grant create any table to schema1;
any "modifier"允许以非自己的模式创建表 .
any
允许非DBA用户在另一个模式中创建表的唯一方法是为用户提供 CREATE ANY TABLE 系统特权 .
CREATE ANY TABLE
此权限只能由具有DBA权限的用户授予SCHEMA1 .
更好的解决方案(最小化 CREATE ANY TABLE 权限带来的安全威胁......)
在schema2上创建一个过程,该过程将表定义作为"input"参数(例如,varchar2(4000)中的p_tab_def) .
里面放了一个execute_immediate(p_tab_def);声明 . 您必须首先检查p_tab_def,以便保护自己免受其他DDL语句的影响,而不是"CREATE TABLE [...]" . (例如,您可以通过检查前两个单词来使用简单的检查 - >它必须是"CREATE TABLE") .
GRANT EXECUTE ON schema2.procedure_name TO schema1;
这是一个简单的概念......我在以前的工作中使用过这样的概念 .
3 回答
你想授予
create ANY table
:any
"modifier"允许以非自己的模式创建表 .允许非DBA用户在另一个模式中创建表的唯一方法是为用户提供
CREATE ANY TABLE
系统特权 .此权限只能由具有DBA权限的用户授予SCHEMA1 .
更好的解决方案(最小化
CREATE ANY TABLE
权限带来的安全威胁......)在schema2上创建一个过程,该过程将表定义作为"input"参数(例如,varchar2(4000)中的p_tab_def) .
里面放了一个execute_immediate(p_tab_def);声明 . 您必须首先检查p_tab_def,以便保护自己免受其他DDL语句的影响,而不是"CREATE TABLE [...]" . (例如,您可以通过检查前两个单词来使用简单的检查 - >它必须是"CREATE TABLE") .
GRANT EXECUTE ON schema2.procedure_name TO schema1;
这是一个简单的概念......我在以前的工作中使用过这样的概念 .