다음 명령을 사용하여 데이터베이스를 복원하려고 합니다.
$ sudo -u postgres pg_restore -C -d dvdrental dvdrental.tar
[sudo] password for t:
그러나 다음과 같은 오류 메시지가 나타납니다.
디렉터리를 다음으로 변경할 수 없습니다."/home/t/mydata/.../relational model/SQL/implementations/Implementations, 즉 관계형 데이터베이스 관리 시스템/postgreSQL/general/web/postgresqltutorial/databases": 권한이 거부되었습니다
pg_restore: [archiver]는 입력 파일 'dvdrental.tar'을 열 수 없습니다: 해당 파일이나 디렉터리가 없습니다
권한이 거부된 현재 디렉터리로 디렉터리를 변경할 수 없는 이유가 무엇인지 궁금합니다.
파일 권한 비트는 다음과 같습니다.
-rw-rw-r-- 1 t t 2838016 May 26 2013 dvdrental.tar
상위 디렉토리 중 하나를 누구도 읽고 실행할 수 없기 때문입니까? 이 파일에는 상위 디렉터리가 많이 있습니다. 어떻게 확인할 수 있나요?
답변1
당신은 할 수 있지만 사용자는 postgres
할 수 없습니다.
sudo -u postgres
user-id를 postgres로 변경하고 명령을 실행합니다. 이제 사용자 postgres는 입력 파일은 물론 현재 디렉터리에도 액세스할 수 없습니다.
대신 다음을 수행하십시오.
$ sudo -u postgres pg_restore -C -d dvdrental < dvdrental.tar
이렇게 하면 sudo가 시작되기 전에 파일이 사용자 계정의 셸에서 열리고 pg_restore
표준 입력의 파일 내용에 액세스됩니다.
답변2
현재 디렉토리와 모든 상위 디렉토리는 사용자가 액세스할 수 있어야 합니다 postgres
.즉권한을 결정할 때 각 디렉터리에 적용되는 소유자/그룹/기타 권한에 대해 실행 가능/검색 가능 비트를 설정하거나 postgres
ACL을 사용하여 해당 권한을 부여합니다.
권한을 확인하려면 다음을 사용하세요 namei
.
namei -l /path/to/directory
바라보다사용자가 특정 파일에 액세스할 수 있는지 확인하는 방법은 무엇입니까?더 알아보기.