16日目 RailsからPostgreSQLのデータベースを操作するためのユーザー作成・権限

おはようございます。
今日も、JRuby on Rails(JRuby 9.1.17)をインストールして、Railsアプリをローカルで動かすために設定中です。

昨日の記事はこちらです。

本日はできるだけ短く、PostgreSQLに、Railsからデータベースを作成したり、新規レコードの作成・変更・削除を行うためのユーザー作成・権限について説明します。

PostgreSQLにおける「ロール」

PostgreSQLにて、データベースを作成したり、接続(ログイン)したりなど様々な操作を行うためには、「ロール」(ユーザ)というものが必要です(参考記事はこちら)

上の記事によれば、「ロール」には属性があって、主に5つの属性を「ロール」に与えることができるようです。
①ログイン
⇒データベースにも接続可能。接続後にテーブル、カラム、レコード追加など、接続先のデータベースの内容を編集可能。
②パスワード
⇒データベース接続時にパスワードを要求される場合のパスワードを設定可能。
③データベース作成
⇒データベースそのものを作成可能。
④ロール作成
⇒ロールそのものを作成可能。
⑤スーパーユーザ
⇒ログイン権限を除くすべての権限を付与可能。強力な権限のため、安易にスーパーユーザという属性をロールに与えないほうがよい。
※ロールの属性についてはこちらにも詳しい説明があります。

なお、postgreSQLインストール直後は「postgres」という全ての属性(権限)を持ったスーパユーザが既にあるため、通常は「postgres」というユーザにて、postgreSQLを使いながら、データベースを新規で作ったり、ロール(ユーザー)を新しく作って必要な権限を与えたり、色々と操作すると思います。

Railsを操作するための「ロール」に必要な属性

今回は、RailsからPostgreSQLのデータベースを作成したり、接続してテーブル・カラム・レコードの追加編集を行なうように「ロール」を作成します。
そこで必要な属性は前述に述べた①~⑤のうち、以下の3つです。
①ログイン
②パスワード
③データベース作成

①と②はともかく、③は必要なのかな?と疑問に思うかもしれません。
実際、③を付与しなくとも、別のデータベース作成権限を持つロール(例:「postgres」等のスーパーユーザ)が、Railsアプリで使用するデータベース名と同じものを、事前に作っておけば、あとはそのデータベースに接続するだけで、テーブル・カラム・レコードの追加編集ができます。

そのため、データベースを事前に作っておいてからRailsアプリを使ってデータベースを操作する場合には、①と②のログインとパスワードのみあれば、データベースに接続できるので十分です。

ですが、データベースを事前に作ろうとすると、postgreSQLのコマンドラインツールを立ち上げて、「postgres」等のスーパーユーザでログインして、データベースを新規作成するコマンドを入力する、といういくつかの手間がかかります。

一方、③のデータベース作成の属性も持つロールを作っておけば、postgreSQLのコマンドラインツールを立ち上げなくとも、Railsを用いて直接データベースを新規作成できるようになり、多少は手間を省けるかと思います。(その方法は今度紹介できればと思います。)

PostgreSQLの「ロール」作成手順

まず、PostgreSQLのコマンドラインツールを起動します。起動方法の詳細は以下の記事の「3. PostgreSQL 10のデータベースへの接続確認」という見出しにて確認することができます。

PostgreSQLのコマンドラインツールを起動して(デフォルトのロール「postgres」にて)ログインしたら以下の画面が出てくると思います。

そこで、前述の①~③の属性を満たすロールを作成するコマンドを入力します。(コマンドは以下の通りです。)

create user (ロール名) with password '(パスワード)' createdb;

上記コマンドのうち、「create user (ロール名)」の部分は、前述の①のログイン属性を持つロールを「(ロール名)」という名前にて新しく作るということを意味しており、Railsアプリで使用するロール名(ユーザ名)をここで指定します。

また、「with password '(パスワード)'」の部分は、前述の②のパスワードを指定する部分であり、Railsアプリの接続時に必要なパスワードをここで決めます。

最後の「cretedb」の部分は、前述の③のデータベース作成権限をロールに付与するという意味を持っています。

このように上記のコマンドを入力することで、前述の①~③の属性を全て満たすロール(ユーザ)を作成することができます。

ちなみに、コマンド入力の参考にした記事は以下の通りです。

実際に、PostgreSQLのコマンドラインツールからコマンドを入力した際の様子は以下の通りです。

なお、作成済の「ロール」を一覧で確認するコマンドが

\du

ですが、それを入力してみると以下のように、作成済の「ロール」一覧が表示されて、先ほどのコマンドで作成されたユーザーとその属性も確認することができます。

わかりづらいかもしれませんが、作成済のロール一覧の中で、「属性」に「DB作成可」としか付けられていないロール(ユーザ)の行がありますが、先ほどのコマンドで作成されたロールのものだと思います。
(※コマンドで入力したロール名(ユーザ名)と同じものが作成済のロール一覧に表示されていれば大丈夫です。)

RailsからPostgreSQLのデータベースを操作するためのユーザー作成はこれだけ行えば大丈夫です。

おわりに

ここまで読んでくださってありがとうございました。
今回の記事はできるだけ短くまとめてみましたが、いかがでしょうか?笑
次のターンへ続きます。

この記事が気に入ったらサポートをしてみませんか?