왜 새로운 사용자가 PostgreSQL에서 테이블을 만들 수 있습니까?


13

다음 두 가지 자습서를 따라 DB를 만듭니다.

  1. 완전한 권한을 가진 사용자 링크
  2. 읽기 전용 사용자 링크

그런 다음 CJ Estel의 자습서 에서 " 새 사용자에게 명시 적으로 테이블 을 제공하지 않았더라도 테이블생성 하는 기능을 상속했을 수도 있습니다"라는 팁을 얻었습니다 . 물론 읽기 전용 사용자는 테이블을 만들고 소유 할 수 있습니다!

CJ Estel은 근본적인 원인, 즉 템플릿 데이터베이스를 지적했습니다. 그러나 테이블을 생성하는 기능 은 postgresql.org에서 호스팅되는 것을 포함하여 인터넷 사용자가 "읽기 전용 사용자 postgres"에서 얻는 대부분의 자습서를 약화 시킵니다. 사용자에게는 읽기 전용 권한 이상이 있습니다!

새로운 사용자에게 왜이 기능이 있습니까? 이 권한을 취소 한 후 데이터베이스가 해당 사용자에게 실제로 읽기 전용입니까?

답변:


13

TL; DR : 새로운 사용자는 public스키마에 테이블을 만들 수 있습니다 .

기본값을 싫어하는 경우 원하는 초기 구성으로 새 템플릿 데이터베이스를 만들어야합니다. 예를 들어,

DROP SCHEMA public;

또는

REVOKE ALL ON SCHEMA public FROM public;
GRANT USAGE ON SCHEMA public TO public;

템플릿에서.

당신이 원하는 경우 public데이터베이스에 아무런 권한이 없다하는 사용자, 당신은 추가해야한다 :

REVOKE ALL ON DATABASE mydbname FROM public;
GRANT CONNECT ON DATABASE mydbname TO public;

그래서 것을 public사용자가 스키마 또는 사용 임시 테이블을 만들 수 없습니다.


개인적으로, 이것을 디자인하는 경우 TEMP기본적으로 데이터베이스에 대한 권한을 부여 하지만 CREATE(데이터베이스의 스키마) 또는 CREATE( public스키마의 테이블 )은 허용하지 않습니다 . 나는 소유자를 위해 예약합니다.

그들은 오래 전에 만들어진 선택이지만 지금 변경하기는 매우 어렵습니다.


사용자 계정을 생성해야하고 종종 데이터베이스를 생성하기를 원하기 때문에 PostgreSQL을 시작하기가 너무 어렵다는 규칙적인 불만이 있습니다. 왜 자동으로 생성하고 인증 모드로 '신뢰'를하는 것이 쉬운가? postgres사용자가 기본적으로 비밀번호를 사용 하지 않는 이유는 무엇 postgres입니까? OS에 존재하는 사용자를 자동 생성하지 않는 이유는 무엇입니까? 기타

신규 사용자에게는 실제 사용성 문제가 있습니다. 특히 대부분의 사람들은 peer인증이 무엇인지 , 또는 psqlPostgreSQL을 설치 한 후 바로 실행 하면 로그인 한 이름으로 사용자가 없다고 말하는 이유를 모릅니다 .

pg_hba.conf구성 파일은 지저분 하지만 사용자는 SQL 수준에서 생성됩니다. 이 분할은 사용자를 혼란스럽게합니다.

그러나 많은 것들이 프로젝트가 모든 사람을 행복하게 만들지 않는 안전한 기본값과 쉬운 기본값 사이의 타협입니다.


그래서 나는 실행 revoke create on database [databasename] from [username];하고 DB는 이제 실제로 [username]에 대해서만 읽습니다. 권리? 나는 좋은 Postgres 책을 읽었을 때이 답변으로 다시 돌아올 것입니다 :)
Jesvin Jose

2
이전 의견에 대한 답변으로, 그 번호는 없습니다.
Jesvin Jose
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.