リモート データベースへの Postgresql 接続。 PostgreSQL データベースに接続します。 ユーザーの役割の変更

09.11.2020
システム管理

この投稿は、PostgreSQL を初めてインストールする初心者向けの簡単な説明です。 PostgreSQL を使い始めるために必要な情報はすべてここにあります。

DBMSへの接続

最初に行うことは、PostgreSQL へのアクセス権を取得し、スーパーユーザーとしてアクセスすることです。
認証設定は pg_hba.conf ファイルにあります。
  1. ローカルのすべての postgres ピア
この行は、postgres ユーザーがソケット経由で任意のローカル PostgreSQL データベースに接続できることを示しています。 パスワードを入力する必要はありません。オペレーティング システムがユーザー名を送信し、それが認証に使用されます。
接続しましょう:
  1. $ sudo -u postgres psql postgres postgres
ネットワーク経由で接続できるようにするには、pg_hdba.conf に次の行を追加する必要があります。
  1. # タイプ データベース ユーザー アドレス メソッド
  2. hostssl すべて すべて 0.0.0.0/0 md5
認証方式 MD5接続するにはパスワードを入力する必要があることを意味します。 psql コンソールを頻繁に使用する場合、これはあまり便利ではありません。 一部のアクションを自動化したい場合、悪いニュースは、psql が引数としてパスワードを受け入れないことです。 これらの問題を解決するには、適切な環境変数を設定する方法と、特別な .pgpass ファイルにパスワードを保存する方法の 2 つがあります。

PGPASSWORD 環境変数の設定

この方法は使用しない方が良いとすぐに言います。 オペレーティングシステム閲覧できるようにする 一般ユーザー psを使用した環境変数。 ただし、必要に応じて、ターミナルに次のように書き込む必要があります。
  1. エクスポート PGPASSWORD=mypasswd
変数は現在のセッションで使用できます。 すべてのセッションに変数を設定する必要がある場合は、例の行を .bashrc または .bash_profile ファイルに追加する必要があります。

パスワードを .pgpass ファイルに保存する

Linux について話している場合、ファイルは $HOME (/home/username) にある必要があります。 所有者 (0600) のみが書き込みおよび読み取り権限を持つ必要があります。 次のような行をファイルに書き込む必要があります。
  1. ホスト名:ポート:データベース:ユーザー名:パスワード
最初の 4 つのフィールドに「*」を入力できます。これは、フィルタリングなし (完全選択) を意味します。

ヘルプ情報の取得

\? - 使用可能なすべてのコマンドとその簡単な説明が表示されます。
\h - 使用可能なすべてのクエリのリストが表示されます。
\h CREATE - 特定のリクエストに対するヘルプを提供します。

DBMSユーザー管理

PostgreSQL ユーザーのリストを取得するにはどうすればよいですか?
  1. または、pg_user テーブルをクエリすることもできます。

新しい PostgreSQL ユーザーの作成

これは、psql シェルから CREATE コマンドを使用して実行できます。
  1. CREATE USER ユーザー名 WITH パスワード "password" ;
またはターミナルを使用することもできます。
  1. createuser -S -D -R -P ユーザー名
パスワードの入力を求められます。

ユーザーパスワードの変更

  1. ALTER USER ユーザー名 WITH PASSWORD "パスワード" ;

ユーザーの役割の変更

ユーザーにデータベースを作成する権限を与えるには、次のクエリを実行します。
  1. ALTER ROLE ユーザー名 WITH CREATEDB ;

データベース管理

psql ターミナルでのデータベースのリストの表示: Linux ターミナルでも同じです:
  1. psql -l
psql からデータベースを作成する (PostgreSQL ターミナル)
  1. データベースの作成 dbname 所有者 dbadmin ;
ターミナルを使用して新しいデータベースを作成します。
  1. createdb -O ユーザー名 データベース名;

データベースへのアクセス権の設定

ユーザーがデータベースの所有者である場合、そのユーザーはすべての権限を持ちます。 ただし、別のユーザーにアクセス権を付与したい場合は、GRANT コマンドを使用してこれを行うことができます。 以下のクエリにより、ユーザーはデータベースに接続できるようになります。 ただし、pg_hba.conf 構成ファイルについては忘れずに、適切な接続権限も必要です。
  1. データベース dbname への接続を dbadmin に許可します。

0

困っています。 私たちは、しばらくの間使用している postgres 9.2 データベースを持っています。 次に、ネットワークの外部から接続できるようにする必要があります。

そこで、外部 IP アドレスを構成し、リモート ホストから Telnet 経由でポート 5432 に接続できることをテストします。 したがって、これは次のことを証明します ネットワーク接続機能、ファイアウォールなどすべて良好です。

接続しようとすると:
PSQL -h db.host.com -d データベース名 -p 5432 -U ユーザー

また来ます Psql: サーバーが予期せず接続を閉じました。

それを確認しました
postgresql.confにlisten_addresses = "*"が設定されています

そして、pg_hba.conf には次の行があります (テスト目的のみ)
ホスト すべて すべて 0.0.0.0/0 md5

そしてデータベースをリロードして、選択した変更をテストしました。
したがって、これにより、あらゆるソースからの接続が許可されるはずです。

データベース サーバーの psql バージョンは 9.2.14、クライアントでは 9.2.13 です。

何か提案やアイデアはありますか?

  • 1 件の回答
  • 並べ替え:

    活動

1

さらに詳しい情報を得るためにいくつかのことを試してみたいと思います。

    Postgres はサーバーに最後にログインして、接続時に何が起こっているかを確認します。

    psql --version を実行して、サーバーのバージョンとほぼ一致していることを確認します。 (すでにこれを行っているようですが、後世のためにここに残しておきます。)

    strace psql.... を実行して、どこまで失敗するかを確認します。

これはやはりネットワークの問題のように思えます。 使用している Telnet コマンドは何ですか? 「外部 IP」は、AWS の場合と同じように聞こえます。 設定 リモートアクセス VPC への移行には多くの手順が必要です。 他に外部に公開されているサービスは実行されていますか?

Postgres サーバーをシャットダウンし、nc を使用して 5432 をリッスンすることでトラブルシューティングを行うこともできます。 次に、Telnet を実行して、データを送受信できるかどうかを確認します。

1

ポール、提案してくれてありがとう。 ストレッチをしてバージョンを確認しました。 おっしゃるとおり、AWS から接続しようとしました。 それは、AWS が公開する IP の IP-2 範囲へのアクセスのみを許可するためにロードバランサーで使用していた層であることがわかりました。 iruleを無効にするとすぐに接続できました。 EC2 インスタンスのパブリック IP を確認したところ、確かに CIDR 通知を介してルールにリストされていたため、これは非現実的なロジックに違いありません。 -

注意 : Windows OS を使用していて、PostgreSQL と Debit Plus V12 をまだインストールしていない場合は、ダウンロード ページから、プリインストールされた PostgreSQL DBMS と接続されたデータベース (ウクライナ用の基本構成) を備えた Debit Plus V12 アセンブリをダウンロードできます。 。 それ以外の場合は、まず PostgreSQL DBMS をインストールし、 ソフトウェアパッケージ「Debit Plus V12」。その後、次の手順に従って接続を設定し、PostgreSQL データベースをインポートできます。

PostgreSQL データベースに接続するには、次の手順を実行する必要があります。

    「デビットプラス V12」を起動し、新規拠点を追加( コンテキストメニュー「新規追加」)

    「既存をリストに追加」ボックスにチェックマークを付けたままにします。

「DBMS」 - POSTGRE。

「データベースサーバー」 - ローカルホスト。

「データベース名」 - PostgreSQL DBMS のデータベース名をラテン文字の小文字 (小文字) で指定します。

注記: 通常、1つの塩基が使用されます。 特別な目的のために、データベースをいくつかに分割することができます。その場合は、「複数のデータベースを使用する」の横のボックスにチェックを入れ、「次へ」ボタンをクリックして、「タグ」と物理データベースの対応を指定する必要があります。 これは、たとえば、複数の企業のデータベースが同じディレクトリ (取引先、アイテムなど) を参照する場合に必要になることがあります。 このケースについてはこれ以上説明しません。

「設定ディレクトリ」 - PostgreSQL のデータベース設定へのパス (drive\DebetPlusV12\base\pgdpbase) を指定します。

「完了」ボタンをクリックして変更を保存します。

    pgAdmin (PostgreSQL DBMS 管理者) を実行し、サーバーを追加し (ファイル/サーバーの追加...)、新しいデータベースを追加します ([新しいデータベース...] メニュー)。

「ホスト」フィールドにサーバー名「localhost」を入力し、必要に応じて残りのフィールドに入力します。

「名前」欄にデータベース名を入力します(「デビットプラス V12」データベースへの接続設定の「サーバー」欄に入力したものと同じです)。

    アーカイブからデータベースをインポートするには、「復元...」メニューを使用します。

データベース アーカイブ dpbase.bakup へのパス (ドライブ\DebetPlusV12\base\pgdpbase) を指定します。

    ユーザー dpadmin を追加できます。これは、デフォルトで Debit Plus V12 の管理者です (パスワードなし)。

このユーザーにすべての権限を割り当てます。

注記 : dpadmin ユーザーを追加することはできません。データベースをアクティブ化するときに、postgres 管理者名を入力する必要があります。

データベースのリストを更新します (メニュー「更新」)。

注記 : ユーザーに「スーパーユーザー」権限を割り当てたくない場合は、「テーブル」と「ビュー」に権限を割り当てます。 これを行うには、対応するオブジェクトを選択し、「許可ウィザード」コンテキスト メニュー項目を選択します。

「選択」タブで「すべてチェック」ボタンをクリックし、「権限」タブで「すべて」にチェックを入れて「追加/変更」ボタンをクリックします。 変更を保存します。

    Debit Plus V12 ソフトウェアでデータベース接続設定をアクティブにします (コンテキスト メニュー「アクティブにする」)。

システムはデータベースに接続するためのパスワードを要求します。 「はい」をクリックします。

注意! このようなメッセージが表示されない場合は、メニュー項目「ツール」/「データベース構造の更新」を選択して、データベース構造の更新を開始します。

その結果、次のウィンドウが表示されます。

すべてのチェックボックスをデフォルトのままにしておきます(すべてのデータベーステーブルの「再インデックス」列にチェックマークが付いている必要があります)。

変更が完了したら、作業を開始できます。

    「Debit Plus V12」を起動し、新規拠点を追加します(コンテキストメニュー「新規追加」)。

    「既存をリストに追加」フィールドにチェックマークを付けたままにします。

最初のフィールドに、データベースの任意の名前を入力します (名前は、動作しているコンピューターごとに異なる場合があります)。

「DBMS」 - POSTGRE。

「データベース サーバー」 - サーバーの名前または IP アドレス。

「データベース サーバー ポート」 - データベース サーバー ポートを指定します。デフォルトは 5432 です。

「データベース名」 - データベースの名前をラテン文字の小文字で入力します。

「データベース スキーマ名」 - dpbase.

「Debit Plus 認証を使用する」ボックスのみをチェックします。

「設定ディレクトリ」 - PostgreSQL のデータベース設定へのパスを指定します (ネットワーク パス\DebetPlusV12\base\pgdpbase)。

「完了」ボタンをクリックして変更を保存し、データベースをアクティブにします。

    起動オプションを設定します (メインメニューの「設定」/「起動オプション」)

表示される画面の「設定変更用パスワード」欄にパスワード「150301」を入力し、「同意する」ボタンをクリックしてください。

サーバー上の JDebet フォルダーへのパスを指定し、「保存」をクリックします。 データベースをアクティブにすると、作業を開始できます。

PostgreSQL は、オープンなクロスプラットフォームのオブジェクト リレーショナル DBMS です。 ソースコード。 この記事では、PostgreSQL をインストールする方法を説明します。 Ubuntu Linuxに接続し、いくつかの簡単な SQL クエリを実行するだけでなく、バ​​ックアップの設定方法も説明します。

PostgreSQL 9.2 を Ubuntu 12.10 にインストールするには、次のコマンドを実行します。

sudo apt-add-repository ppa:pitti/postgresql
sudo apt-get アップデート
sudo apt-get インストール postgresql-9.2

シェルを通じて DBMS を操作してみましょう。

sudo -u postgres psql

テスト データベースとテスト ユーザーを作成しましょう。

CREATE DATABASE テストデータベース;
ユーザー test_user をパスワード "qwerty" で作成します。
test_user にデータベース test_database のすべてを許可します。

シェルを終了するには、コマンド \q を入力します。

ここで、test_user に代わって、作成されたデータベースを操作してみましょう。

psql -h localhost テストデータベース テストユーザー

新しいテーブルを作成しましょう。

CREATE SEQUENCE user_id;
CREATE TABLE ユーザー (
id INTEGER PRIMARY KEY DEFAULT NEXTVAL ("user_ids" ) 、
ログイン CHAR(64) 、
パスワード CHAR(64));

他の DBMS とは異なり、PostgreSQL には auto_increment プロパティを持つ列がないことに注意してください。 代わりに、Postgres はシーケンスを使用します。 現時点では、 nextval 関数を使用して、指定されたシーケンスの一意の番号を取得できることを知っていれば十分です。

SELECT NEXTVAL ("user_ids" ) ;

users テーブルの id フィールドのデフォルト値を次のように設定します。 NEXTVAL("ユーザーID")、 auto_increment が与えるのと同じ効果を達成しました。 新しいレコードをテーブルに追加する場合、一意の ID が自動的に生成されるため、ID を指定する必要はありません。 複数のテーブルで同じシーケンスを使用できます。 こうすることで、これらのテーブルの一部のフィールドの値が重複しないことを保証できます。 この意味で、シーケンスは auto_increment よりも柔軟です。

まったく同じテーブルを 1 つのコマンドを使用して作成できます。

CREATE TABLE users2 (
id シリアル主キー 、
ログイン CHAR(64) 、
パスワード CHAR(64));

この場合、id フィールドのシーケンスは自動的に作成されます。

\d コマンドを使用すると、使用可能なすべてのテーブルのリストが表示され、\d users を使用すると、users テーブルの説明が表示されます。 探している情報が得られない場合は、 \d ​​の代わりに \d+ を試してください。 \l コマンドを使用してデータベースのリストを取得し、\c dbname コマンドを使用して特定のデータベースに切り替えることができます。 コマンドのヘルプを表示するには、「\?」と言います。

PostgreSQL はデフォルトでテーブル名と列名を小文字に変換することに注意することが重要です。 この動作を望まない場合は、二重引用符を使用できます。

CREATE TABLE "anotherTable" ("someValue" VARCHAR (64 ) ) ;

PostgreSQL のもう 1 つの機能は、この DBMS の操作を開始する際に問題を引き起こす可能性があります。それは、いわゆる「スキーマ」です。 スキーマは、データベース内のテーブルを含むディレクトリのような、テーブルの名前空間のようなものです。

スキーマの作成:

スキーマ予約を作成します。

スキームに切り替えます:

search_path TO 予約を設定します。

\dn コマンドを使用して、既存のスキームのリストを表示できます。 デフォルトのスキーマの名前は public です。 原則として、スキーマの存在を知らなくても PostgreSQL を正常に使用できます。 ただし、レガシー コードを扱う場合や、一部のエッジ ケースでは、スキーマについて知っておくと非常に役立ちます。

それ以外の場合、PostgreSQL での作業は、他のリレーショナル DBMS での作業とそれほど変わりません。
INSERT INTO ユーザー (ログイン、パスワード)
VALUES ("afiskon" , "123456" ) ;

ユーザーから * を選択します。

ここで別のマシンから Postgres に接続しようとすると、失敗します。

psql -h 192.168.0.1 テストデータベース テストユーザー
PSQL: サーバーに接続できませんでした: 接続が拒否されました
サーバーはホスト「192.168.0.1」上で実行されており、受け入れられていますか?

ポート 5432 での TCP/IP 接続?

これを修正するには、次の行を追加します。

listen_addresses = "ローカルホスト,192.168.0.1"

sudo ユーティリティで脆弱性 (CVE-2019-18634) が確認されました。このユーティリティは、他のユーザーに代わってコマンドの実行を整理するために使用され、システム内の権限を高めることができます。 問題 […]

WordPress 5.3 のリリースでは、WordPress 5.0 で導入されたブロックエディターが改善および拡張され、新しいブロック、より直感的な操作、およびアクセシビリティの向上が実現しました。 エディターの新機能 […]

9 か月の開発を経て、FFmpeg 4.2 マルチメディア パッケージが利用可能になりました。これには、さまざまなマルチメディア フォーマット (録音、変換、および […]

  • の新機能 リナックスミント 19.2 シナモン

    Linux Mint 19.2 は、2023 年までサポートされる長期サポート リリースです。 アップデートされたものが付属しています ソフトウェア改善と多くの新機能が含まれています […]

  • Linux Mint 19.2ディストリビューションがリリースされました

    発表されたリリース Linuxディストリビューション Mint 19.2 は、Linux Mint 19.x ブランチの 2 番目のアップデートで、Ubuntu 18.04 LTS パッケージ ベースに基づいており、2023 年までサポートされます。 ディストリビューションには完全な互換性があります [...]

  • バグ修正と機能改善を含む新しい BIND サービス リリースが利用可能です。 新しいリリースは、開発者の Web サイトのダウンロード ページからダウンロードできます。 […]

    Exim は、ケンブリッジ大学で開発されたメッセージ転送エージェント (MTA) です。 Unix システムインターネットに接続されています。 [...]に従って無料で利用できます。

    約 2 年間の開発を経て、Linux 0.8.0 上の ZFS のリリースが発表され、実装が行われました。 ファイルシステム ZFS は、Linux カーネルのモジュールとして設計されています。 このモジュールは、2.6.32 から […] までの Linux カーネルでテストされています。

    インターネットのプロトコルとアーキテクチャを開発する IETF (インターネット エンジニアリング タスク フォース) は、ACME (自動証明書管理環境) プロトコルの RFC を完成しました […]

    コミュニティによって管理され、誰にでも無料で証明書を提供する非営利認証局 Let’s Encrypt は、過去 1 年間の結果を総括し、2019 年の計画について語りました。 […]