수퍼 유저가 아닌 pg_stat_activity에서 다른 세션의 쿼리를 보는 방법은 무엇입니까? 유저로서 다음 쿼리를 수행하면 모든

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원하는 결과를 얻기 위해 역할 을 부여 할 수 있습니다.