Postgresql 9.2 데이터베이스가 있습니다. 이 데이터베이스에는 두 명의 사용자가 작성됩니다. 수퍼 유저로서 다음 쿼리를 수행하면 모든 것을 볼 수 있습니다.
select * from pg_stat_activity
그러나 수퍼 유저로 연결하지 않고도 동일한 결과를 얻을 수 있습니까?
슈퍼 유저가 볼 수있는 결과를 얻으려면 어떤 권한 / 역할을 부여 / 만듭니 까?
답변
이 시점에서 권한을 부여 할 권한이 없으며 수퍼 유저에게 하드 코드되어 있습니다. 메일 링리스트에서 최근에 논의되었으며, 누군가가 메일 링 작업 시간을 찾으면 9.5에서 변경 될 수 있습니다.
이 문제를 해결 SECURITY DEFINER
하려면 수퍼 유저가 소유하고 원하는 쿼리를 실행 하는 함수를 만들 수 있습니다 . 수퍼 유저가 아닌 사용자 pg_stat_activity
는 함수를 호출하여 내용을 볼 수 있습니다.
예를 들어 수퍼 유저로 실행하십시오.
CREATE FUNCTION get_sa() RETURNS SETOF pg_stat_activity AS
$$ SELECT * FROM pg_catalog.pg_stat_activity; $$
LANGUAGE sql
VOLATILE
SECURITY DEFINER;
CREATE VIEW pg_stat_activity_allusers AS SELECT * FROM get_sa();
GRANT SELECT ON pg_stat_activity_allusers TO public;
무료 액세스 pg_stat_activity
는 이유로 제한됩니다. 다른 사람의 쿼리에서 민감한 정보를 스누핑 할 수 있습니다. 예를 들어 다른 사용자가 pgcrypto를 사용하고 있다고 상상해보십시오. 권한을 public
부여하는 대신 모니터링을위한 대리 사용자 역할을하는 특정 사용자 또는 역할에게만 권한을 부여해야합니다.
답변
PostgreSQL 10부터 pg_read_all_stats
원하는 결과를 얻기 위해 역할 을 부여 할 수 있습니다.