リモートデータベースへのPostgresql接続。 新しいPostgreSQLユーザーを作成する

20.04.2019 問題

  システム管理

この投稿は、PostgreSQLを初めてインストールした人向けの初心者向けクイックガイドです。 PostgreSQLの使用を開始するために必要なすべての情報を以下に示します。

DBMSへの接続

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

環境変数PGPASSWORDの設定

  一部のオペレーティングシステムでは通常のユーザーがpsを使用して環境変数を表示できるため、この方法を使用しない方が良いとすぐに言わなければなりません。 ただし、必要に応じて、ターミナルに書き込む必要があります。
  1. export PGPASSWORD \u003d mypasswd
  変数は現在のセッションで使用可能になります。 すべてのセッションに変数を設定する必要がある場合は、例の行を.bashrcまたは.bash_profileファイルに追加する必要があります

.pgpassファイルのパスワード保存

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

ヘルプ情報を取得する

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

データベース管理ユーザー

  PostgreSQLユーザーのリストを取得する方法は? または、pg_userテーブルをクエリできます。
  1. SELECT * FROM pg_user;

新しいPostgreSQLユーザーを作成する

  psqlシェルから、これはCREATEコマンドを使用して実行できます。
  1. パスワード「password」を使用してユーザー名を作成します。
  または、ターミナルを使用できます。
  1. createuser -S -D -R -Pユーザー名
  パスワードの入力が要求されます。

ユーザーパスワードを変更する

  1. パスワード「パスワード」を使用してユーザー名を変更します。

ユーザー役割を変更する

  ユーザーがデータベースを作成するには、クエリを実行します。
  1. CREATEDBを使用したALTER ROLEユーザー名。

データベース管理

  psqlターミナルのデータベースのリスト:Linuxターミナルからの同じ:
  1. psql -l
  psqlからデータベースを作成する(PostgreSQLターミナル)
  1. CREATE DATABASE dbname OWNER dbadmin;
  ターミナルを使用して新しいデータベースを作成します。
  1. createdb -O username dbname;

データベース権限の設定

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

PostgreSQLは、オープンソースのクロスプラットフォームオブジェクトリレーショナルデータベース管理システムです。 この記事では、Ubuntu LinuxにPostgreSQLをインストールし、それに接続していくつかの簡単なSQLクエリを実行する方法と、バックアップを設定する方法を学びます。

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

sudo apt-add-repository ppa:pitti / postgresql
sudo apt-get update
sudo apt-get postgresql-9.2をインストール

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

sudo -u postgres psql

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

CREATE DATABASE test_database;
パスワード「qwerty」を使用してユーザーtest_userを作成します。
データベースtest_databaseのすべてをtest_userに付与します。

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

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

psql -h localhost test_database test_user

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

CREATE SEQUENCE user_ids;
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( "user_ids")  、auto_incrementと同じ効果を達成しました。 テーブルに新しいレコードを追加するとき、一意のIDが自動的に生成されるため、IDを指定できません。 複数のテーブルで同じシーケンスを使用できます。 これにより、これらのテーブルの一部のフィールドの値が重複しないことを保証できます。 この意味で、シーケンスはauto_incrementよりも柔軟です。

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

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

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

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

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

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

このDBMSでの作業を開始することが困難なPostgreSQLのもう1つの機能は、いわゆる「スキーマ」です。 スキーマは、データベースの内部にテーブルがあるディレクトリのような、テーブルの名前空間のようなものです。

スキーマ作成:

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

回路に切り替える:

search_pathを予約に設定します。

\\ dnコマンドを使用して、既存のスキーマのリストを表示できます。 デフォルトでは、publicという名前のスキーマが使用されます。 原則として、スキームの存在を知らなくても、PostgreSQLを正常に使用できます。 ただし、一部の境界の場合と同様に、レガシーコードを使用する場合、スキームの知識は非常に役立ちます。

それ以外の場合、PostgreSQLでの作業は、他のリレーショナルDBMSでの作業とそれほど変わりません。

INSERT INTO users(ログイン、パスワード)
VALUES( "afiskon"、 "123456");
SELECT * FROMユーザー;

別のマシンからpostgresに接続しようとすると、失敗します:

psql -h 192.168.0.1 test_database test_user

Psql:サーバーに接続できませんでした:接続が拒否されました
   サーバーはホスト「192.168.0.1」で実行されており、受け入れていますか
   ポート5432でのTCP / IP接続?

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

listen_addresses \u003d "localhost、192.168.0.1"

...ファイル/etc/postgresql/9.2/main/postgresql.confも同様です。

0

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

したがって、外部IPアドレスを構成し、telnetを介してリモートホストからポート5432に接続できることをテストします。 したがって、ネットワーク接続が機能していること、ファイアウォールなどが証明されています。すべてが順調です。

次を使用して接続しようとすると:
  PSQL -h db.host.com -d dbname -p 5432 -U user

psqlを返します。サーバーが予期せず接続を閉じました。

私はそれをチェックしました
  listen_addresses \u003d "*"はpostgresql.confで設定されます

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

そして、選択した変更を確認するためにデータベースをリロードしました。
  したがって、これにより、任意のソースからの接続が許可されます。

データベースサーバーのpsqlバージョンは9.2.14で、クライアントのpsqlバージョンは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通知を通じてiruleで指定されているため、これは超現実的なロジックである必要があります。 -