programing

사용자에게 Oracle의 추가 스키마에 대한 액세스 권한을 부여하는 올바른 방법

minimums 2023. 7. 22. 09:54
반응형

사용자에게 Oracle의 추가 스키마에 대한 액세스 권한을 부여하는 올바른 방법

Oracle에 Bob과 Alice 두 사용자가 있으며, 둘 다 sqlplus에서 sysdba로 다음 명령을 실행하여 생성되었습니다.

$password로 식별되는 사용자 $blah 생성;$blah에 리소스 부여, 연결, 뷰 생성;

밥이 앨리스의 스키마(즉, 모든 테이블)에 완전히 액세스할 수 있기를 원하지만, 어떤 허가를 실행해야 할지, sysdba로 실행해야 할지, 앨리스로 실행해야 할지 모르겠습니다.

참고 자료에 대한 좋은 조언에 대해 듣게 되어 기쁩니다. 인터넷이나 제 책상 위에 있는 "Oracle Database 10g The Complete Reference"에서 좋은 답변을 얻을 수 없는 것 같습니다.

AFAIK 권한 부여 개체를 한 번에 하나씩 수행해야 합니다.

일반적으로 스크립트를 사용하여 다음과 같은 작업을 수행합니다.

SELECT 'GRANT ALL ON '||table_name||' TO BOB;'
FROM   ALL_TABLES
WHERE  OWNER = 'ALICE';

다른 DB 객체도 마찬가지입니다.

허가를 발급하는 데 필요한 패키지를 각 스키마에 넣을 수 있으며, 이 패키지는 EXECUTE Immediate를 통해 각 GRANT 문을 모두 호출합니다.

예.

   PROCEDURE GRANT_TABLES
   IS
   BEGIN

      FOR tab IN (SELECT table_name
                  FROM   all_tables
                  WHERE  owner = this_user) LOOP
         EXECUTE IMMEDIATE 'GRANT SELECT, INSERT, UPDATE, DELETE ON '||tab.table_name||' TO other_user';
      END LOOP;
   END;

고려해야 할 것들이 많습니다.접근 권한을 말할 때 테이블 앞에 다른 사용자 이름을 붙이시겠습니까?문제가 있는 경우 원래 소유자를 숨길 수 있도록 공용 동의어를 사용할 수 있습니다.그런 다음 동의어에 대한 권한을 부여합니다.

또한 가능한 한 미리 계획을 세우고자 합니다.나중에 프랭크가 앨리스의 스키마에도 액세스할 수 있기를 원하십니까?N개의 테이블에 대한 권한을 무시할 필요는 없습니다.데이터베이스 역할을 사용하는 것이 더 나은 해결책이 될 것입니다.예를 들어 "ALICE_TABLES" 역할에 대한 선택 권한을 부여하고 다른 사용자에게 액세스 권한이 필요한 경우 해당 역할에 대한 권한만 부여합니다.이렇게 하면 DB 내에서 부여하는 권한을 구성하는 데 도움이 됩니다.

소유자가 다른 경우 다른 솔루션:

BEGIN

  FOR x IN (SELECT owner||'.'||table_name ownertab
            FROM   all_tables
            WHERE  owner IN ('A', 'B', 'C', 'D'))
  LOOP
    EXECUTE IMMEDIATE 'GRANT SELECT ON '||x.ownertab||' TO other_user';
  END LOOP;
END;

언급URL : https://stackoverflow.com/questions/198952/correct-way-to-give-users-access-to-additional-schemas-in-oracle

반응형