3-2와 같이 테이블 스키마 권한을 부여했지만 select시 없는 테이블로 나옴.

ERROR: relation "ods.test" does not exist LINE 2: from "ods".test ^ SQL state: 42P01 Character: 20
SQL state : 42P01

ERROR:  permission denied for schema mart
SQL state: 42501

아래와 같이 권한 부여에도 테이블 조회가 되지 않는다.
GRANT SELECT ON ALL TABLES IN SCHEMA ods TO adbuser;

 

/*권한부여된 테이블 조회하기*/
select table_schema, table_name
from information_schema.tables
where not table_schema='pg_catalog'
and not table_schema='information_schema';

해당문제를 팀원과 같이 알아보던중 해결책을 찾을 수 있었다.

------------------------------------------------------------------------------------------------
GRANT
USAGE ON SCHEMA <schema_name> TO <db_user>;
------------------------------------------------------------------------------------------------

해당 구문을 실행하여... 스키마를 사용 할 수 있는 권한을 부여해줘야 한다.
분명이 table select등 권한을 부여했음에도 또 저런 구문을 이용하여 줘야 되는지? 의문이 들었다.

이 부분은 기존에 GRANT SELELC ON~ 명령이 스키마안의 테이블에 대한 권한을 부여하는거라면 스키마 자체또한 객체로 보고, 해당 객체(스키마)에도 접속할 수 있는 액세스 권한을 부여하여야 하기에 GRANT USAGE ON SCHEMA 명령을 사용해야 되는걸로 확인되었다.

※ 여러 MS Azure Doc사이트 문서, 인터넷 검색등을 통해서도 저부분까지 표기되어 있는부분이 별로 없었다.
  실제 테스트를 기본적으로 제공되는 'public' 스키마를 써서 할텐데 이 경우 아마 디폴트로 'public'스키마는
  사용자(role)을 생성시 기본으로 객체 권한이 부여되는듯 하다. 그러므로 해당 명령수행을 놓치걸로 판단된다.

+ Recent posts