sql >> データベース >  >> RDS >> PostgreSQL

サーバーがdblinkの使用中にパスワードを要求しない場合、非スーパーユーザーは接続できません

    ドキュメント から :

    および

    つまり、 dblink 呼び出しは dblink_connectを使用しています 暗黙のうちに。 dblink_connect_uを使用します 代わりに、またはauthメソッドをたとえばに変更します。 md5。

    caixaにも実行権限を付与する必要があることに注意してください 役割、例:

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

    実例(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');
    

    編集:

    少し誤解を招くような答えでごめんなさい。もちろん、あなたはしない dblink_connect_uが必要です md5認証済み接続の場合。私が見る1つの可能性があります。 PostgreSQLには2つの異なるがあります 接続タイプ:ホスト およびローカル

    実行中:

    psql -h localhost ..

    ホスト接続が組み込まれていますが、

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

    ローカルを使用 入力するので、ローカル接続にパスワード以外のメソッド(たとえば、identメソッドやtrust)がある場合は、それが返されます

    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.
    

    チェック

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

    ホストの場合 繋がり。可能であれば明確にするために、pg_hba.confを投稿してください 。

    CONNECTについても確認しました vchitta_opの特権 DB、ただしエラーメッセージは異なります:

    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. IDをコンマ区切り値として保存する

    2. インデックスと複数列の主キー

    3. OracleDBMSジョブが実行されていません

    4. 条件付きの重複キー更新で?