\ l에 특권은 언제 표시됩니까?


10

액세스 권한은 \ l로 표시되는시기는 언제입니까? \ l로 표시된 액세스 권한은 부여 후 취소 후 변경 될 수 있습니다.

$ createuser -EP my_readonly
$ psql development
development=# \l
                                           List of databases
            Name             |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------------------------+----------+----------+-------------+-------------+-----------------------
 development                 | vagrant  | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | 
...
development=# grant usage on schema public to my_readonly;
development=# grant connect on database development to my_readonly;
development=# \l
                                             List of databases
            Name             |  Owner   | Encoding |   Collate   |    Ctype    |     Access privileges      
-----------------------------+----------+----------+-------------+-------------+----------------------------
 development                 | vagrant  | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =Tc/vagrant               +
                             |          |          |             |             | vagrant=CTc/vagrant       +
                             |          |          |             |             | my_readonly=c/vagrant
...
development=# revoke connect on database development from my_readonly;
REVOKE
development=# revoke usage on schema public from my_readonly;
REVOKE
development=# \l
                                           List of databases
            Name             |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------------------------+----------+----------+-------------+-------------+-----------------------
 development                 | vagrant  | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =Tc/vagrant          +
                             |          |          |             |             | vagrant=CTc/vagrant

왜 그런 겁니까? 어떤 상태가 바뀌 었습니까? (필자는 PUBLIC 역할이 연결 권한이 같은데요 때문에) 나는 연결에 my_readonly 사용자의 능력이 전체 psql의 세션을 통해 불변 생각하지만, 분명히 뭔가 변화 : 그 일이 무엇입니까?

부수적 인 질문 : PUBLIC에 실제로 연결 권한 있는지 postgres에 명시 적으로 물어볼 수있는 방법 은 무엇 입니까?

답변:


4

psql의 백 슬래시 명령은 시스템 카탈로그를 살펴 보는 쿼리에 대한 바로 가기입니다. 이 \l명령은의 정보 pg_catalog.pg_database, 특히이 쿼리를 살펴 봅니다 .

SELECT d.datname as "Name",
   pg_catalog.pg_get_userbyid(d.datdba) as "Owner",
   pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding",
   d.datcollate as "Collate",
   d.datctype as "Ctype",
   pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges"
FROM pg_catalog.pg_database d
ORDER BY 1;

명령 행 psql에서 -E플래그를 호출 할 때 플래그를 전달하여 백 슬래시 명령에 사용중인 것을 표시 할 수 있습니다 .

데이터베이스 또는 다른 객체에 대한 권한이 PostgreSQL에서 생성 한 기본값 인 경우 *acl열은입니다 NULL. 기본값을 변경하면, 사용자가 실행 한 명령문 GRANT및 / 또는 REVOKE명령문 과 관련된 정보로 ACL 열이 채워집니다 .

당신은을 통해 특별히 권한 / ACL을 볼 수 있습니다 \z또는\dp

여기에서 더 읽으면 :

http://www.postgresql.org/docs/9.4/static/sql-grant.html

아래로 스크롤하거나 단어를 검색 하면 ACL 열에서 또는 ACL 열에 psql표시되는 ACL을 해석하는 방법을 보여주는 표를 볼 수 있습니다 \l.

예를 들면 다음과 같습니다.

=Tc/vagrant

ACL 행 은 PUBLIC에 적용된 권한을 나타내며 해당 특정 역할에 적용 되므로 PUBLIC (모든 역할을 포함하는 내재적 역할)은 임시 테이블을 작성 T하고 연결하는 권한을 갖 습니다.c=xxxxxrolname=xxxx

Dalibo의 프레젠테이션은이를 명확하게하는 데 도움이 됩니다. PostgreSQL의 권한 관리

희망이 도움이됩니다. =)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.