pgbouncer
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
pgbouncer [2024/08/29 10:40] – jbi | pgbouncer [2024/08/30 11:35] (current) – jbi | ||
---|---|---|---|
Line 13: | Line 13: | ||
" | " | ||
- | In **/etc/pgbouncer/pgbouncer.ini** | + | Per database setup. |
- | set: | + | < |
+ | REVOKE ALL PRIVILEGES ON SCHEMA public FROM pgbouncer; | ||
+ | CREATE SCHEMA IF NOT EXISTS pgbouncer; | ||
+ | REVOKE ALL PRIVILEGES ON SCHEMA pgbouncer FROM pgbouncer; | ||
+ | GRANT USAGE ON SCHEMA pgbouncer TO pgbouncer; | ||
- | - auth_type = scram-sha-256 | + | CREATE OR REPLACE FUNCTION |
- | - auth_file = /etc/pgbouncer/userlist.txt | + | RETURNS TABLE(username TEXT, password TEXT) AS |
- | - auth_query = SELECT | + | $$ |
- | - auth_user=pgbouncer | + | |
+ | FROM pg_catalog.pg_authid | ||
+ | WHERE | ||
+ | -- disable line below if superusers (postgres) should connect to | ||
+ | NOT pg_authid.rolsuper AND | ||
+ | NOT pg_authid.rolreplication AND | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ) AND | ||
+ | | ||
+ | $$ | ||
+ | LANGUAGE SQL STABLE SECURITY DEFINER; | ||
+ | REVOKE ALL ON FUNCTION pgbouncer.get_auth(username TEXT) FROM PUBLIC, pgbouncer; | ||
+ | GRANT EXECUTE ON FUNCTION pgbouncer.get_auth(username TEXT) TO pgbouncer; | ||
- | When this is working, change auth_query to something more secure, ie from pgbouncer.org | ||
- | < | ||
- | CREATE OR REPLACE FUNCTION pgbouncer.user_lookup(in i_username text, out uname text, out phash text) | ||
- | RETURNS record AS $$ | ||
- | BEGIN | ||
- | SELECT usename, passwd FROM pg_catalog.pg_shadow | ||
- | WHERE usename = i_username INTO uname, phash; | ||
- | RETURN; | ||
- | END; | ||
- | $$ LANGUAGE plpgsql SECURITY DEFINER; | ||
- | REVOKE ALL ON FUNCTION pgbouncer.user_lookup(text) FROM public, pgbouncer; | ||
- | GRANT EXECUTE ON FUNCTION pgbouncer.user_lookup(text) TO pgbouncer; | ||
</ | </ | ||
- | and set the auth_query to | + | Minimum / |
< | < | ||
- | auth_query = | + | [databases] |
+ | * = host=10.97.97.97 port=5432 auth_user=pgbouncer | ||
+ | [users] | ||
+ | |||
+ | [pgbouncer] | ||
+ | logfile = / | ||
+ | pidfile = / | ||
+ | listen_addr = * | ||
+ | listen_port = 6432 | ||
+ | unix_socket_dir = / | ||
+ | auth_type = md5 | ||
+ | auth_file = / | ||
+ | auth_query = SELECT username, password from pgbouncer.get_auth($1) | ||
+ | admin_users = pgbouncer | ||
+ | stats_users = pgbouncer | ||
</ | </ | ||
- | + | pg_hba.conf at the cluster | |
- | + | < | |
+ | .. | ||
+ | .. | ||
+ | host all | ||
+ | </ | ||
pgbouncer.1724920813.txt.gz · Last modified: 2024/08/29 10:40 by jbi