sql >> Databáze >  >> RDS >> PostgreSQL

Spusťte dávkový soubor pomocí příkazu psql bez hesla

Pokračujte ve čtení, nejlepší možnosti jsou až na konci . Nejprve si ale ujasněme pár věcí.

Pouze umlčte požadavek na heslo

Pokud je vaším problémem pouze výzva k zadání hesla, můžete jej umlčet. Zde cituji manuál:

-w
--no-password

Nikdy nevyžadujte heslo. Pokud server vyžaduje ověření heslem a heslo není dostupné jinými prostředky, jako je .pgpass soubor, pokus o připojení se nezdaří. Tato volba může být užitečná v dávkových úlohách a skriptech, kde není přítomen žádný uživatel pro zadání hesla. (...)

Pravděpodobně nepotřebujete heslo

Normálně je to zbytečné. Výchozí superuživatel databáze postgres obvykle odpovídá stejnojmennému uživateli systému. Spuštění psql z tohoto účtu nevyžaduje heslo, pokud je metoda ověřování peer nebo ident jsou nastaveny ve vašem pg_hba.conf soubor. Pravděpodobně máte řádek jako tento:

local    all    postgres    peer

A obvykle také:

local    all    all         peer

To znamená, že každý místní uživatel se může přihlásit do všech databáze jako uživatel databáze stejného jména bez hesla.
Nicméně , je zde běžná mylná představa. Znovu cituji:

Tato metoda je podporována pouze u místních připojení .

Tučné zdůraznění min.
Připojujete se k localhost , což není „místní připojení“ , i když má v sobě slovo „místní“. Je to připojení TCP/IP k 127.0.0.1. Wikipedie na localhost:

Na moderních počítačových systémech localhost jako název hostitele se překládá na adresu IPv4 v 127.0.0.0/8 (loopback) síťový blok, obvykle 127.0.0.1 , nebo ::1 v IPv6.

Jednoduché řešení pro místní připojení

Vynechejte parametr -h z psql vyvolání. Citace manuálu na psql ještě jednou:

Pokud vynecháte název hostitele, psql se připojí přes zásuvku domény Unix na server na místním hostiteli nebo přes TCP/IP na localhost na strojích, které nemají sokety unixové domény.

Windows

... nemá sokety unixové domény, pg_hba.conf řádky začínající local nejsou použitelné na Windows. V systému Windows se připojujete přes localhost ve výchozím nastavení, což nás přivádí zpět na začátek.

Pokud jsou vaše požadavky na zabezpečení laxní, můžete důvěřovat všem připojením přes localhost :

host    all    all    127.0.0.1/32     trust

Udělal bych to pouze pro ladění s vypnutým vzdáleným připojením. Pro větší zabezpečení můžete v systému Windows použít ověřování SSPI. Přidejte tento řádek do pg_hba.conf pro „místní“ připojení:

host    all    all    127.0.0.1/32     sspi

Pokud skutečně potřebujete heslo

Mohli byste nastavte proměnnou prostředí , ale to se nedoporučuje , zejména pro Windows. Manuál:

PGPASSWORD chová se stejně jako parametr připojení hesla. Použití této proměnné prostředí se z bezpečnostních důvodů nedoporučuje, protože některé operační systémy umožňují uživatelům, kteří nejsou root, vidět proměnné prostředí procesu prostřednictvím ps; místo toho zvažte použití ~/.pgpass soubor (viz oddíl 32.15).

Manuál na psql :

conninfo řetězec je alternativou k zadání parametrů připojení:

 $ psql "user=myuser password=secret_pw host=localhost port=5432 sslmode=require"

Nebo URI , který se používá místo názvu databáze:

 $ psql postgresql://myuser:[email protected]:5432/mydb?sslmode=require

Soubor s heslem

Obvykle je však vhodnější nastavit .pgpass soubor místo vkládání hesel do souborů skriptů.
Přečtěte si pozorně krátkou kapitolu v manuálu. Zejména si všimněte, že zde ...

Název hostitele localhost odpovídá oběma TCP (název hostitele localhost ) a soket domény Unix (pghost prázdný nebo výchozí adresář soketu) připojení pocházející z místního počítače.

Přesná cesta závisí na systému. Tento soubor může ukládat hesla pro více kombinací role a portu (klastr DB):

localhost:5432:*:myadmin:myadminPasswd
localhost:5434:*:myadmin:myadminPasswd
localhost:5437:*:myadmin:myadminPasswd
...

V systému Windows stroje hledají soubor v:

%APPDATA%\postgresql\pgpass.conf

%APPDATA% obvykle řeší:C:\Documents and Settings\My_Windows_User_Name\Application Data\ .



  1. Jak napsat parametrizovaný dotaz na vložení Oracle?

  2. Jak vytvořit jednoduchý výběrový dotaz v návrhovém zobrazení v Accessu 2016

  3. Jak spustit uloženou proceduru každý den v SQL Server Express Edition?

  4. jak najít indexy v tabulce v oracle