CDataでユーザー管理用のDBの変更とユーザー固有接続を試してみる

2020.07.14

はじめに

データアナリティクス事業本部のkobayashiです。

REST API構築ツール CData API Server で使用するユーザー管理用データベースはWindows版ですとSQLiteになりますがこれを他のデータベースに変更することができます。また、CData API Serverでは全ユーザー同一の接続設定を使いますが、ユーザー固有接続を設定することでユーザー別の接続設定が可能です。

今回はこれら設定を行ってみたいと思います。

CData API Serverのインストール方法やデータソースの設定方法は下記のエントリをご参照ください。

環境

  • Windows 10
  • CData API Server - 19.0.7362.0

また今回使用しているCData API Serverのホストとポートは以下になります。

192.168.7.129:8153

ユーザー管理用データベースの変更

SQLiteですとローカルのファイルですので、何かしら外部からユーザー管理を制御したい場合には不便を感じます。その様な場合は他のデータベースを利用することもできます。

CData API ServerのWindows版ですとASP.NET アプリケーションなので設定ファイルは以下になります。

C:¥Program Files¥CData¥CData API Server¥www¥Web.Config

このファイルにユーザーデータを保存したいデータベースの設定を行います。このファイルの最後に接続情報を記載するブロックがコメントアウトされているのでここを修正します。

  <!-- Configure your connection strings here -->  <!-- connectionStrings>
    <!-- add name="AppDB" providerName="System.Data.SQLite" connectionString="Data Source=C:\mydb.db;" /-->
    <!-- add name="AppUsers" providerName="System.Data.SQLite" connectionString="Data Source=C:\mydb.db;" /-->
    <!-- add name="AppLogs" providerName="System.Data.SQLite" connectionString="Data Source=C:\mydb.db;" /-->
  </connectionStrings --></configuration>

今回はCData API ServerをインストールしたホストにMariaDBをインストールしてあるのでここにユーザーデータとログデータを保存します。

  • connectionStringsをアンコメントアウト
  • name="AppDB"name="AppUsers"name="AppLogs"の要素をアンコメントアウトしてドライバ名、ホスト名、ポート、データベース名、ユーザー名、パスワードを入力する。

name="AppDB"name="AppUsers"name="AppLogs"の要素の接続先設定は接続先のデータベースによって変わりますのでご注意ください。

  <!-- Configure your connection strings here -->  <connectionStrings>
    <add name="AppDB" providerName="System.Data.CData.MySQL" connectionString="Server=127.0.0.1;port=3306;Database=cdata;Uid=cdata_user;Pwd={パスワード};charset=utf8"  />
    <add name="AppUsers" providerName="System.Data.CData.MySQL" connectionString="Server=127.0.0.1;port=3306;Database=cdata;Uid=cdata_user;Pwd={パスワード};charset=utf8"  />
    <add name="AppLogs" providerName="System.Data.CData.MySQL" connectionString="Server=127.0.0.1;port=3306;Database=cdata;Uid=cdata_user;Pwd={パスワード};charset=utf8"  />
  </connectionStrings></configuration>

以上で設定は終わりです。 後はCData API Serverを再起動することで指定したデータベースにAppDB用のテーブルとしてapp_setting,app_scripts、AppUsers用のテーブルとしてapp_users,app_user_connections、AppLogs用のテーブルとしてapp_logs,app_requestsが作成され、ユーザー情報とログが書き込まれます。

ユーザー固有接続の設定

通常、CData API Serverで接続設定をしてリソースを作成するとAPIに接続するユーザーは全ユーザー共通の接続情報を使います。しかしセキュリティ要件的にユーザー別にデータソースへのアクセスを制御したい場合もあると思います。

以前こちらのエントリで試したダイレクトクエリを使う際にはユーザー固有接続は有効だと思います。

そのような場合には接続設定でマスター接続を有効にし「マスター接続」を使います。

マスター接続にするとユーザーはユーザー別に接続設定を行わないと以下のエラーメッセージが返りリソースへアクセスできなくなります。

No connections defined for user '{接続先名}'.

ユーザー接続設定を行う

ユーザー別に接続設定を行うにはのユーザー登録URLに記載されているURLにブラウザでアクセスします。 図の例ですと

http://192.168.7.129:8153/registerUserConnection.rst?conn=Conn5

になります。

手順1).ユーザー登録URLにアクセスするとBasic認証を要求されますので、ユーザー名とパスワードには認証トークンを入力する。

手順2).ユーザー別の接続設定画面に遷移するので必要情報を入力する。(入力する接続情報はマスター接続の設定項目に準じます)

以上でユーザー接続設定は完了です。ユーザー別に接続権限を分けたい場合はこの機能をご利用ください。

まとめ

CData API Serverの運用を便利に行う上で「ユーザー管理用データベースの変更」、「ユーザー固有接続の設定」は行ったほうが良い機能です。運用方法に合わせてこれらの設定を行ってください。

最後まで読んで頂いてありがとうございました。