사용자에게 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
'programing' 카테고리의 다른 글
AWS: 구성 프로파일(MyName)을 찾을 수 없습니다. (0) | 2023.07.22 |
---|---|
기관.스프링 골조웹.클라이언트HttpClientErrorException: 400 잘못된 요청 (0) | 2023.07.22 |
오라클의 기존 인덱스에 열 추가 (0) | 2023.07.22 |
Spring Boot 1.3.3 @EnableResourceServer 및 @EnableOAuth2So 동시에 (0) | 2023.07.22 |
Spring-Boot: 여러 요청 동시 처리 (0) | 2023.07.22 |