PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Użytkownicy nie będący superużytkownikami nie mogą się połączyć, jeśli serwer nie żąda hasła podczas korzystania z dblink

Z dokumentacji :

i

Oznacza to, że Twój dblink połączenie używa dblink_connect niejawnie. Użyj dblink_connect_u zamiast tego lub zmień metodę uwierzytelniania na np. md5.

Pamiętaj, że musisz również przyznać uprawnienia do wykonywania do caixa rola, na przykład przez:

GRANT EXECUTE ON FUNCTION dblink_connect_u(text) TO caixa;
GRANT EXECUTE ON FUNCTION dblink_connect_u(text, text) TO caixa;

Przykład pracy (po GRANT ):

meta=> SELECT dblink_connect_u('conn1', 'dbname=op');
meta=> SELECT * FROM dblink('conn1','SELECT op_col from op_table')
            AS t(op_col varchar);
 op_col 
--------
 aaa
 bbb
 ccc
(3 rows)
meta=> SELECT dblink_disconnect('conn1');

EDYTUJ:

Przepraszam za nieco mylącą odpowiedź. Oczywiście nie potrzebujesz dblink_connect_u dla uwierzytelnionego połączenia md5. Widzę jedną możliwość. PostgreSQL ma dwa różne typy połączeń:host i lokalne .

Bieganie:

psql -h localhost ..

zawiera połączenie z hostem, ale

dblink_connect('mycon','dbname=vchitta_op user=caixa password=caixa');

używa lokalnego type, więc jeśli masz metodę bez hasła dla połączenia lokalnego (na przykład metodę ident lub trust), to zwraca

ERROR:  password is required
DETAIL:  Non-superuser cannot connect if the server does not request a password.
HINT:  Target server's authentication method must be changed.

Sprawdź

dblink_connect('mycon','hostaddr=127.0.0.1 dbname=vchitta_op user=caixa password=caixa')

dla hosta połączenie. Dla jasności, jeśli to możliwe, opublikuj swój pg_hba.conf .

Sprawdziłem też co z CONNECT przywilej vchitta_op DB, ale komunikat o błędzie jest inny:

REVOKE CONNECT ON DATABASE vchitta_op FROM PUBLIC;
REVOKE CONNECT ON DATABASE vchitta_op FROM caixa;

SELECT dblink_connect('mycon','dbname=vchitta_op user=caixa password=caixa');
ERROR:  could not establish connection
DETAIL:  FATAL:  permission denied for database "vchitta_op"
DETAIL:  User does not have CONNECT privilege.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL 'AT TIME ZONE', zapytanie szerokie i wyrażenie 'SELECT' dla wszystkich kolumn (nazwa_tabeli.*)

  2. Jak wypróbować wiele opcji SELECT, aż wynik będzie dostępny?

  3. Wyjście zapytania PostgreSQL w postaci pliku Excel

  4. Symbol wieloznaczny PostgreSQL LIKE dla dowolnej listy słów

  5. FATAL:nie można uzyskać dostępu do pliku klucza prywatnego /etc/ssl/private/ssl-cert-snakeoil.key:Odmowa uprawnień