When I updated
https://www.postgresql.org/docs/devel/ddl-schemas.html#DDL-SCHEMAS-PATTERNS
for CVE-2018-1058, I wrote that some schema usage patterns are secure against
CREATEROLE users and database owners. That was incorrect. Even with the
first pattern, a database owner can attack the database's users via "CREATE
SCHEMA trojan; ALTER DATABASE $mydb SET search_path = trojan, public;". A
CREATEROLE user can issue "GRANT $dbowner TO $me" and then use the database
owner attack. I plan to update this section to assert that all three usage
patterns are equally vulnerable to dbowner and CREATEROLE attack. (The
technique described under "If untrusted users have access to a database ..."
in libpq.sgml remains secure.)