Postgre를 삭제할 수 없습니다.SQL 역할입니다.오류: "일부 개체가 종속되어 있으므로 삭제할 수 없습니다."
저는 Postgre를 삭제하려고 했습니다.SQL 사용자:
DROP USER ryan;
다음 오류가 발생했습니다.
Error in query: ERROR: role "ryan" cannot be dropped because some objects depend on it DETAIL: privileges for database mydatabase
저는 다음 스레드에서 솔루션을 찾았습니다.
여전히 동일한 오류가 있습니다.
사용자 "ryan"에게 다음과 같은 모든 권한을 부여한 후에 이 문제가 발생합니다.
GRANT ALL PRIVILEGES ON DATABASE mydatabase ON SCHEMA public TO ryan;
DROP USER
역할이 다른 개체를 소유하거나 다른 개체에 대해 부여된 권한을 가지고 있는 동안에는 계속할 수 없습니다.
모든 권한을 제거합니다(문법에서 너무 명확하지 않음).설명서:
[...] 현재 데이터베이스의 개체 및 공유 개체(데이터베이스, 테이블스페이스)에 대해 지정된 역할에 부여된 모든 권한도 취소됩니다.
따라서 역할을 삭제할 수 있는 신뢰할 수 있는 일련의 명령은 다음과 같습니다.
REASSIGN OWNED BY ryan TO postgres; -- or some other trusted role
DROP OWNED BY ryan;
역할이 소유하거나 권한이 있는 동일한 클러스터의 모든 데이터베이스에서 두 명령을 실행합니다!
그리고 마지막으로:
DROP USER ryan;
REASSIGN OWNED
역할이 현재 소유하고 있는 모든 개체의 소유권을 변경합니다.DROP OWNED
그런 다음 권한만 취소합니다(소유권은 제외).
또는 생략할 수 있습니다.REASSIGN OWNED
.그리고나서DROP OWNED
(또한) 사용자가 소유한 모든 개체를 삭제합니다. (확실합니까?!)
관련:
- 권한이 있는 역할 삭제 (모든 관련 DB에 대한 명령을 생성하는 기능 포함)
- Postgre에 연결된 개체 찾기SQL 역할
저에게 효과가 있었던 것은 다음과 같은 단계를 따르는 것이었습니다.
- 데이터베이스에 연결하는 중
\c mydatabase
- 소유권 재할당
REASSIGN OWNED BY ryan TO <newuser>;
또는 개체를 삭제하는 중입니다.
DROP OWNED BY ryan;
- 실행 중
REVOKE PRIVILEGES
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM ryan;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM ryan;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM ryan;
- 사용자 삭제
DROP USER ryan;
PS: 2단계와 3단계를 모두 실행할 필요가 없을 수도 있습니다. 일반적으로 두 단계 중 하나만 실행해도 충분합니다.
RDS Postgres 13에서 도움이 된 내용:
REVOKE ALL PRIVILEGES ON DATABASE <my_db> FROM <my_user>;
또한 역할이 테이블 소유자여서 삭제할 수 없는 유사한 오류가 발생하여 테이블 소유자를 다시 할당해야 했습니다.
ALTER TABLE <my_table> OWNER TO <trusted_role>;
AWS가 마스터 사용자에게 완전한 슈퍼유저를 제공하지 않기 때문에 RDS에서 이와 같은 재할당을 수행하는 것은 저에게 적합하지 않았습니다.REASSIGN OWNED BY <olduser> TO <newuser>;
REVOKE ALL ON SCHEMA "public" FROM "<user>";
나를 위해 일했습니다.
제게 효과가 있었던 것은template1
데이터베이스를 선택한 다음 일부 역할을 삭제합니다.
$ psql -U postgres postgres
postgres=# update pg_database set datistemplate = false where datname='template1';
UPDATE 1
postgres=# drop database template1;
DROP DATABASE
postgres=# create database template1 template=template0;
CREATE DATABASE
postgres=# update pg_database set datistemplate = true where datname='template1';
UPDATE 1
postgres=# DROP ROLE test;
DROP ROLE
AWS Postgresql RDS를 사용하는 사용자는 다음을 시도할 수 있습니다.
- postgres 사용자에 로그인한 다음 소유자 권한 부여
postgres=> GRANT target_user to old_user;
GRANT ROLE
- 제거할 사용자(old_user)를 사용하여 대상 DB에 로그인한 다음 재할당
target_db=> REASSIGN OWNED BY old_user TO target_user;
REASSIGN OWNED
- postgres 사용자에 다시 로그인하고 모든 권한을 취소한 후 사용자 삭제
postgres=> REVOKE ALL PRIVILEGES ON DATABASE target_db FROM old_user;
REVOKE
postgres=> DROP USER old_user;
DROP ROLE
https://aws.amazon.com/premiumsupport/knowledge-center/rds-postgresql-drop-user-role/ 참조
언급URL : https://stackoverflow.com/questions/51256454/cannot-drop-postgresql-role-error-cannot-be-dropped-because-some-objects-depe
'programing' 카테고리의 다른 글
다른 모든 컨트롤보다 오버레이 컨트롤을 우선시하는 방법은 무엇입니까? (0) | 2023.05.06 |
---|---|
유형 오류: 'zip' 개체를 구독할 수 없습니다. (0) | 2023.05.06 |
'of' 속성이 '관찰 가능한 유형' 유형에 없습니다. (0) | 2023.05.06 |
윈도우즈용 명령줄 svn? (0) | 2023.05.06 |
Bash 스크립트에서 숫자를 추가하려면 어떻게 해야 합니까? (0) | 2023.05.06 |