새로 만든 사용자가 데이터베이스에 연결 한 후 테이블을 만들 수있는 이유가 궁금합니다. 하나의 데이터베이스가 있습니다 project2_core
.
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------------+--------------+-----------+-------------+-------------+-------------------------------
postgres | postgres | SQL_ASCII | C | C |
project2_core | atm_project2 | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 | project2=CTc/project2
template0 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
(5 rows)
여태까지는 그런대로 잘됐다. 이제 사용자를 만듭니다.
postgres=# CREATE ROLE dietrich ENCRYPTED PASSWORD 'md5XXX' LOGIN NOCREATEROLE NOCREATEDB NOSUPERUSER
괜찮아. 데이터베이스에 연결하려고 할 때 사용자는 그렇게 할 수 없습니다.
$ psql -h localhost -p 5432 -U dietrich -W project2_core
Password for user dietrich:
psql: FATAL: permission denied for database "project2_core"
DETAIL: User does not have CONNECT privilege.
이것이 내가 기대 한 것입니다. 이제 이상한 것들이 시작됩니다. 사용자에게 권한을 부여합니다 CONNECT
.
postgres=# GRANT CONNECT ON DATABASE project2_core TO dietrich;
GRANT
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------------+--------------+-----------+-------------+-------------+-------------------------------
postgres | postgres | SQL_ASCII | C | C |
project2_core | atm_project2 | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 | project2=CTc/project2+
| | | | | dietrich=c/project2
template0 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
(5 rows)
추가 권한이 없으면 사용자는 테이블을 만들 수 있습니다.
$ psql -h localhost -p 5432 -U dietrich -W project2_core
Password for user dietrich:
psql (9.2.3)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.
project2_core=> create table adsf ();
CREATE TABLE
project2_core=> \d
List of relations
Schema | Name | Type | Owner
--------+------+-------+----------
public | adsf | table | dietrich
(1 row)
GRANT USAGE
스키마와 GRANT SELECT
테이블에서 명시 적으로 수행하기 전에 사용자가 아무것도 할 수 없다고 기대했을 것 입니다.
내 실수는 어디입니까? 내가 무엇을 잘못하고 있지? 원하는 것을 어떻게 달성 할 수 있습니까 (새 사용자가 적절한 권한을 명시 적으로 부여하기 전에는 아무 것도 할 수 없음)
나는 길을 잃었고, 당신의 도움은 크게 감사합니다 :)
편집 @ daniel-verite의 조언에 따라 데이터베이스를 만든 직후 모든 내용을 수정 했습니다. 사용자 dietrich 는 더 이상 테이블을 만들 수 없습니다. 좋은. 그러나 : 데이터베이스 소유자 인 project2도 테이블을 작성할 수 없습니다. 심지어 실행 한 후 GRANT ALL PRIVILEGES ON DATABASE project2_core TO project2
와 GRANT ALL PRIVILEGES ON SCHEMA public TO project2
, 나는 오류 얻을 에는 스키마에서 만들 수를 선택하지 않았습니다 : ERROR를 , 내가 특별히하려고 할 때 CREATE TABLE public.WHATEVER ();
, 나는 얻을 ERROR : 스키마 공개 거부 권한을 . 내가 무엇을 잘못하고 있지?
REVOKE ALL ON DATABASE project2_core FROM PUBLIC;
. 왜 이것이 효과가 없었습니까?