Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
Amazon Redshift에서 “사용자를 삭제할 수 없습니다” 오류를 해결하려면 어떻게 해야 하나요?
Amazon Redshift에서 사용자 또는 그룹을 삭제할 수 없습니다.
간략한 설명
Amazon Redshift에서 사용자를 삭제하려고 할 때, 다음 오류 메시지 중 하나가 표시될 수 있습니다.
- 오류: 일부 개체가 종속되어 있기 때문에 “사용자 이름”을 삭제할 수 없습니다
- 오류: 사용자에게 일부 개체에 대한 권한이 있기 때문에 “사용자 이름”을 삭제할 수 없습니다
- 오류: 사용자가 일부 개체를 소유하고 있기 때문에 "사용자 이름"을 삭제할 수 없습니다
다음 유형의 사용자를 삭제하려고 할 때 이러한 오류가 발생할 수 있습니다.
- 기본 권한을 가진 소유자 또는 대상 사용자.
- 모든 개체(예: 데이터베이스, 스키마, 테이블, 뷰, 프로시저 및 라이브러리)의 소유자.
- 개체에 대한 사용 권한이 있는 사용자.
이러한 오류 메시지를 해결하려면, 먼저 모든 사용자 권한을 제거합니다. 그런 다음, 개체 소유권을 이전하거나 개체의 그룹 소유권을 제거합니다.
중요: Amazon Redshift 클러스터의 모든 데이터베이스에서 사용자 및 그룹 권한을 해지해야 합니다.
해결 방법
스크립트를 설치하여 뷰 생성
AWS 랩 GitHub 리포지토리에서 v_generate_user_grant_revoke_ddl.sql 및 v_find_dropuser_objs.sql 스크립트를 다운로드하여 설치합니다. v_generate_user_grant_revoke_ddl.sql 및 ㅌv_find_dropuser_objects.sql 스크립트의 뷰는 정의에서 admin 스키마를 사용합니다. Amazon Redshift 클러스터에 admin 스키마가 없는 경우 기존 스키마에서 정의를 수정하세요. 또는 admin 스키마를 생성하세요.
보기 정의에 열 변경 사항이 있는 경우, 새 보기 및 정의를 만들기 전에 보기를 삭제합니다. 이전 뷰를 삭제하기 전에 새 뷰를 만드려 하면 유효하지 않은 테이블 오류가 발생합니다.
사용자 삭제
다음 단계를 완료합니다.
-
사용자별로 검색하여 부여된 사용자 중 삭제하려는 모든 권한을 찾을 수 있습니다. 그런 다음, 해당 권한을 다른 사용자로 다시 부여합니다. 이 사용자는 superuser인 것이 가장 좋습니다.
select regexp_replace(ddl,grantor,'<superuser>') from v_generate_user_grant_revoke_ddl where grantor='<username>' and ddltype='grant' and objtype <>'default acl' order by objseq,grantseq;
참고: 권한을 다시 부여하는 사용자는 개체에 대한 권한이 있는 사용자여야 합니다. 또한 다른 사용자에게 권한 부여가 가능해야 합니다. 권한 재부여 권한이 없는 경우 superuser로 권한을 재부여할 수 있습니다.
-
사용자에게 부여된 모든 권한을 찾은 다음, 해당 권한을 취소합니다.
select ddl from v_generate_user_grant_revoke_ddl where ddltype='revoke' and (grantee='<username>' or grantor='<username>') order by objseq, grantseq desc;
참고: grantor를 권한을 부여한 사용자의 이름으로 대체합니다. grantee를 권한을 받는 사용자의 이름으로 대체합니다.
쿼리에서 레코드가 반환되지 않거나 DROP USER 명령이 실패하면 다음의 쿼리를 실행합니다.select ddl from admin.v_generate_user_grant_revoke_ddl where ddltype='revoke' and ddl ilike '%<user-to-be-dropped>%' order by objseq, grantseq desc;
위 쿼리에는 사용자를 삭제하기 전에 해당 사용자로부터 취소해야 하는 권한이 나열되어 있습니다. 다음 단계로 이동하기 전에 이러한 권한을 취소합니다.
-
빈 액세스 제어 목록(ACL)이 있는지 확인하려면 다음 쿼리를 실행합니다.
select * from pg_user where usename = '<username-to-be-dropped>'; select * from pg_default_acl where defacluser= <user-id>; select pg_get_iam_role_by_user('<user-name>');
사용자 이름과 사용자 ID를 검색하려면, PG_USER_INFO 테이블에서 usename 및 usesysid 열 항목을 찾습니다.
참고: PG_DEFAULT_ACL 테이블에 사용자 항목이 있는 경우, 사용자를 삭제할 수 없습니다. -
사용자에게 여전히 일부 개체에 대한 권한이 있는 경우, 사용자에게 assumerole 권한이 있는지 확인합니다.
select pg_get_iam_role_by_user('<user-name>');
사용자에게 assumerole 권한이 있는 경우 먼저 전체 사용자로부터 assumerole을 취소해야 합니다. 그리고 나서 다음 명령을 실행하여 사용자명을 취소합니다.
revoke assumerole on all from public for all; revoke assumerole on all from <user-name> for all;
-
(선택 사항) 사용자에게 여전히 일부 개체에 대한 권한이 있는 경우, 사용자가 다른 그룹에 속해 있는지 확인합니다. 사용자에게 해당 그룹에서 부여된 권한이 있을 수 있습니다. 또는 사용자에게 PUBLIC 그룹에 부여된 권한이 있을 수 있습니다.
사용자에게 여전히 부여된 권한을 확인하려면, 다음 쿼리를 실행합니다.select * from pg_user where usename = '<username-to-be-dropped>'; select * from pg_group;
pg\ _group 쿼리의 출력에서 grolist 열에 사용자를 나열하는 항목이 있는지 확인합니다. 사용자가 다른 그룹에 속해 있으면, 해당 사용자 ID가 나열됩니다. 해당 그룹에 부여된 권한을 확인합니다.
select ddl from admin.v_generate_user_grant_revoke_ddl where ddltype='revoke' and grantee= 'group <group-name>' ; select * from admin.v_generate_user_grant_revoke_ddl where objname='timecards' and schemaname='postgres' and grantee='PUBLIC' and ddltype='revoke';
참고: objname 및 schemaname을 테이블 및 스키마로 대체합니다. 기본적으로 PUBLIC 그룹에 부여된 권한은 모든 사용자에게 부여됩니다.
-
사용자가 소유한 모든 개체를 찾은 다음 소유권을 다른 사용자 또는 관리자에게 이전합니다.
select ddl||'<newuser>;' as ddl from admin.v_find_dropuser_objs where objowner = '<username-to-be-dropped>';
위 명령의 출력에는 소유권을 새 사용자에게 이전하는 데 사용해야 하는 명령이 나열되어 있습니다.
-
Amazon Redshift 클러스터의 각 데이터베이스에서 2~7단계를 반복합니다.
-
데이터베이스에서 사용자를 제거하려면 다음 명령을 사용합니다.
drop user <username-to-be-dropped>;
그룹 삭제
참고: 그룹을 삭제하기 전에 해당 그룹이 개체에 대해 가지고 있는 모든 권한을 취소해야 합니다.
다음 단계를 완료합니다.
-
그룹에 부여된 모든 권한을 찾은 다음, 해당 권한을 취소합니다.
select ddl from admin.v_generate_user_grant_revoke_ddl where ddltype='revoke' and grantee= 'group <group-name>';
-
Amazon Redshift 클러스터의 각 데이터베이스에서 2단계를 반복합니다. 모든 데이터베이스에서 그룹의 권한이 해지되었는지 확인합니다.
-
사용자 그룹을 제거하려면 DROP GROUP 명령을 실행합니다.

관련 콘텐츠
- 질문됨 2년 전lg...
- 질문됨 14일 전lg...
- 질문됨 일 년 전lg...
- 질문됨 일 년 전lg...
- AWS 공식업데이트됨 3년 전
- AWS 공식업데이트됨 일 년 전
- AWS 공식업데이트됨 4년 전