0

我想将grant-all一个用户的(所有架构对象)提供给另一个用户。我不想全部授予表。用户 1 拥有哪些表、过程、触发器、同义词、函数等,用户 2 应该可以在同一数据库 (Oracle) 中访问这些内容。实际上,我创建了触发器,如果​​在 user1 中有任何新部署,它将向 user2 提供所有权限。但是在创建触发器之前,其余的模式对象没有特权。这是我的问题 谢谢

CREATE OR REPLACE PROCEDURE myddl
(p_ddl IN VARCHAR2) IS
BEGIN
EXECUTE IMMEDIATE p_ddl;
END;
/

CREATE OR REPLACE TRIGGER new_obj_grant_prv
AFTER CREATE ON schema
DECLARE
l_jobno NUMBER;
BEGIN
  IF ora_dict_obj_type IN ('TABLE','VIEW') THEN
     dbms_job.submit(l_jobno,'myddl(''GRANT ALL ON '||ora_dict_obj_owner||'.'||ora_dict_obj_name||' TO user2'');');
  END IF;

  IF ora_dict_obj_type IN ('SEQUENCE','PACKAGE') THEN
     dbms_job.submit(l_jobno,'myddl(''GRANT ALL ON '||ora_dict_obj_owner||'.'||ora_dict_obj_name||' TO user2'');');
  END IF;

  IF ora_dict_obj_type IN ('TRIGGER','SYNONYMS') THEN
     dbms_job.submit(l_jobno,'myddl(''GRANT ALL ON '||ora_dict_obj_owner||'.'||ora_dict_obj_name||' TO user2'');');
  END IF;

  IF ora_dict_obj_type IN ('PROCEDURE','FUNCTION') THEN
     dbms_job.submit(l_jobno,'myddl(''GRANT ALL ON '||ora_dict_obj_owner||'.'||ora_dict_obj_name||' TO user2'');');
  END IF;

END;
4

1 回答 1

1

您可以使用 user1 凭据创建 db-link,然后如果 user2 将通过此 db-link 使用您的模式,他将拥有与 user1 相同的权限。

更新:

在 user2 模式中 -

CREATE DATABASE LINK MY_DB_LINK
 CONNECT TO USER1
 IDENTIFIED BY **USER1_PASSWORD**
 USING '(DESCRIPTION =
    (ADDRESS =
                (PROTOCOL = TCP)
                (HOST = **HOST**)
                (PORT = 1521))
    (CONNECT_DATA = (SID = **SERVICE_NAME**))
  )'
/

其中 HOST 和 SERVICE_NAME 可以在 tnsnames.ora 中创建(可以在 中创建\oracle\product\<version>\client_1\network\admin\tnsnames.ora

然后您可以通过 db-link 在 user2 模式中使用 user1 数据库对象 -

select * from dual@MY_DB_LINK
于 2015-08-27T07:49:53.333 回答