MagicStack / MagicStack/asyncpg
authentication issue with md5 on postgres 11
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 8.1k
- Forks
- 468
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
- asyncpg version: 0.21.0 and lower
- PostgreSQL version: 11
- Do you use a PostgreSQL SaaS? If so, which? Can you reproduce
the issue with a local PostgreSQL install?: - Python version: 3.6.0
- Platform: linux 3.10.0
- Do you use pgbouncer?: No
- Did you install asyncpg with pip?: Yes
- If you built asyncpg locally, which version of Cython did you use?:
- Can the issue be reproduced under both asyncio and
uvloop?:
We have the same code. When running with useridAAA with password, it works on some servers, but not on other servers. The useridAAA's password is authenticated with md5 on the postgres. If we switch to useridBBB, which is authenticated as SHA256 on postgres. It works on all servers. It's the same password for useridAAA and useridBBB. What's dictating the hash on the password on the client side?
Below is the error message when couldn't be authenticated.
`DEBUG: Using selector: EpollSelector
DEBUG: Get address info edclpgsd320c.bcbsfl.com:5420, type=<SocketKind.SOCK_STREAM: 1>
DEBUG: Getting address info edclpgsd320c.bcbsfl.com:5420, type=<SocketKind.SOCK_STREAM: 1> took 2.792 ms: [(<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_STREAM: 1>, 6, '', ('))]
DEBUG: poll 59997.326 ms took 1.820 ms: 1 events
DEBUG: connect <socket.socket fd=6, family=AddressFamily.AF_INET, type=2049, proto=6, laddr=('0.0.0.0', 0)> to ()
DEBUG: poll 59993.166 ms took 0.141 ms: 1 events
DEBUG: <socket.socket fd=6, family=AddressFamily.AF_INET, type=2049, proto=6, laddr=('), raddr=(')> connected to : (<_SelectorSocketTransport fd=6 read=polling write=<idle, bufsize=0>>, <asyncpg.protocol.protocol.Protocol object at 0x7fc691bc7858>)
DEBUG: poll 59990.760 ms took 0.014 ms: 1 events
INFO: poll 59990.568 ms took 60000.243 ms: 1 events
DEBUG: <_SelectorSocketTransport fd=6 read=polling write=<idle, bufsize=0>> received EOF
Traceback (most recent call last):
File "asyncdb3c.py", line 52, in
app = loop.run_until_complete(init_app())
File "/usr/lib64/python3.6/asyncio/base_events.py", line 484, in run_until_complete
return future.result()
File "asyncdb3c.py", line 34, in init_app
pool = await asyncpg.create_pool("postgres://useridAAA:------@------.-----.com:5490/xxx01s1?application_name=aaa",min_size=1, max_size=3,max_inactive_connection_lifetime=3)
File "/usr/lib64/python3.6/asyncio/coroutines.py", line 110, in next
return self.gen.send(None)
File "/u/i3ye/ppx/lib64/python3.6/site-packages/asyncpg/pool.py", line 398, in async__init_
await self._initialize()
File "/usr/lib64/python3.6/asyncio/coroutines.py", line 110, in next
return self.gen.send(None)
File "/u/i3ye/ppx/lib64/python3.6/site-packages/asyncpg/pool.py", line 426, in _initialize
await first_ch.connect()
File "/usr/lib64/python3.6/asyncio/coroutines.py", line 110, in next
return self.gen.send(None)
File "/u/i3ye/ppx/lib64/python3.6/site-packages/asyncpg/pool.py", line 125, in connect
self._con = await self._pool._get_new_connection()
File "/usr/lib64/python3.6/asyncio/coroutines.py", line 110, in next
return self.gen.send(None)
File "/u/i3ye/ppx/lib64/python3.6/site-packages/asyncpg/pool.py", line 472, in _get_new_connection
**self._connect_kwargs)
File "/usr/lib64/python3.6/asyncio/coroutines.py", line 110, in next
return self.gen.send(None)
File "/u/i3ye/ppx/lib64/python3.6/site-packages/asyncpg/connection.py", line 1727, in connect
max_cacheable_statement_size=max_cacheable_statement_size)
File "/usr/lib64/python3.6/asyncio/coroutines.py", line 110, in next
return self.gen.send(None)
File "/u/i3ye/ppx/lib64/python3.6/site-packages/asyncpg/connect_utils.py", line 666, in _connect
connection_class=connection_class)
File "/usr/lib64/python3.6/asyncio/coroutines.py", line 110, in next
return self.gen.send(None)
File "/u/i3ye/ppx/lib64/python3.6/site-packages/asyncpg/connect_utils.py", line 642, in _connect_addr
await asyncio.wait_for(connected, timeout=timeout)
File "/usr/lib64/python3.6/asyncio/tasks.py", line 358, in wait_for
return fut.result()
asyncpg.exceptions.ConnectionDoesNotExistError: connection was closed in the middle of operation
`
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, den Fehler mit PostgreSQL 11 zu reproduzieren, indem du die im Traceback gezeigten Einstiegspunkte asyncpg.create_pool oder asyncpg.connect verwendest und Benutzer vergleichst, die mit md5 beziehungsweise SHA256 authentifiziert werden. Lies den Verbindungspfad rund um asyncpg/connect_utils.py und ermittle das erwartete Client-Verhalten sowie einen reproduzierbaren Testfall; als abgeschlossen gilt die Aufgabe, wenn der Unterschied bei der md5-Authentifizierung erklärt oder korrigiert und verifiziert ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- postgresql, python
- Bereich
- authentication, backend, databases
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Muss geklärt werden
- Anfängerfreundlichkeit
- 25/100