全て クラス 名前空間 関数 変数 型定義 列挙型 列挙値 ページ
セキュリティー

このページでは、クライアントの認証とアクセス権限、ユーザー名とパスワードの指定方法について説明します。 ユーザー名とホストの登録やアクセス権の設定は、MySQLコマンドラインクライアントとTranasctd行う方法の2つがあります。ここではMySQLコマンドラインクライアントを使った方法で説明をします。

クライアント認証

Transactdのクライアント認証には2つの方式があります。

2つめのユーザーとホストの組み合わせ認証はMySQLのnative_passwordと互換性があります。MySQLのクライアント用に設定されたユーザー名とパスワードがそのままTransactdで使用できます。
それぞれの方式について詳しく説明します。

ホスト認証

ホスト認証は、クライアントホストのIPアドレスでアクセス可否の認証を行います。ユーザー名とパスワードは使用しません。 このホスト認証はデフォルトの認証方式です。my.cnfに、何も設定を行わないか transactd_auth_type="" と指定された場合はこの認証方式が使用されます。

・アクセスを許可するホストの指定
ホストの指定は、MySQLのコマンドラインクライアントから以下のようにコマンドを実行します。

grant usage on *.* to root@192.168.0.10, root@192.168.0.11;

上記の例では、192.168.0.10と192.168.0.11の2つのアドレスからのアクセスを許可します。ユーザー名のrootは代理ユーザー名です。 MySQLのgrant文はユーザー名@ホスト名の形式で指定するため、代理ユーザー名を使用します。 代理ユーザー名はデフォルトで "root"が使用されます。 これを変更する場合は、my.cnf に transactd_hostcheck_username="wantname"のように指定することができます。 (wantnameの部分を好きなユーザー名に変更してください。)
また、アドレスの範囲(クラス A B Cのいずれか)で指定することもできます。

grant usage on *.* to root@'192.168.0.0/255.255.255.0';

クラスCの場合は、クラスCのアドレスに続いて ".0/255.255.255.0"を付加します。クラスBでは".0.0/255.255.0.0"、クラスAは".0.0.0/255.0.0.0"を付加します。クラス Cより狭い範囲 "192.168.0.0/255.255.240.0"といった指定は行えません。
また、このような範囲指定の他に"%"文字によるワイルドカード方式での指定も可能です。クラスCは"192.168.0.%"、クラスBは"192.168.%"、クラスAは"10.%"のように指定します。これらはMySQLのユーザー作成ルールと同様です。
ホスト認証では、接続の可否のみを行うだけで、データベースやテーブルに対するオペレーションの可否を制限することはできません。 接続を許可されたホストはすべての機能を利用する権限を有します。
尚、ホスト名 (例 host.domain.com)による指定は行えません。DNSルックアップによる遅延や失敗を防止します。

ユーザーとホストの組み合わせ認証

my.cnfに、transactd_auth_type="mysql_native" と指定された場合はこの認証方式が使用されます。
ユーザーとホストの組み合わせ認証は、MySQLのnative_password認証と同じものです。詳細はMySQLのマニュアルを参照してください。ここでは概要のみ説明します。
この認証は、クライアントホストとクライアントから送られたユーザー名とパスワードを使って、登録済みのパスワードと照合します。 パスワードは、MySQLのコマンドラインクライアントから以下のようにコマンドを実行します。

SET PASSWORD root@'192.168.0.10' password('xxxxxx');

パスワードは、サーバーから送られたランダムなソルト値を使って暗号化され、MySQLのmysql.userテーブルに保存されたsha1ハッシュされた値と照合されます。 接続が許可されたクライアントは、そのユーザーに設定されたアクセス権限の範囲内でデータの処理を行うことができます。

アクセス権限

前章で記しましたがクライアント認証にホスト認証を使用した場合、認証されたクライアントはすべての機能のアクセス権限を有します。 従いまして、ここからの内容は、ユーザーとホストの組み合わせ認証によって認証されたクライアントについて説明します。 アクセス権限についても、MySQLのそれとほとんど同様です。詳細はMySQLのマニュアルを参照してください。 ただし、Transactdにはない機能(トリガーなど)はすべて無視されます。また、フィールドごとのアクセス権限は現在のところ使用されていません。

権限テーブル

アクセス権限は、mysql.user(グローバル) mysql.db(データベース) mysql.tabels_priv(テーブル)の各テーブルに設定された値をorで演算したものになります。 たとえば、データベースごとにアクセスできるユーザーを制限したい場合は、mysql.userのテーブルアクセスに関するグローバル権限は無効にしてmysql.dbにそのユーザーのアクセス権を設定します。 グローバル、データベース、テーブルの別は "database.table"形式の表記のワイルドカード指定で行います。 GRANT ON のあとの指定でそれぞれ、 "*.*" "dtabase.*" "database.table"の3種類の指定方法で行います。

権限の設定変更と有効になるタイミング

アクセス権限はサーバー内部でキャッシュされています。設定内容を変更した場合に有効になるタイミングは以下のようになります。

たとえば、グローバルのアクセス権を変更した場合、それが有効になるのは、それ以降にオープンしたデータベースからです。既にオープンされていたデーベースには反映されません。

ユーザー名とパスワードの指定

ユーザー名とパスワードの指定が可能なのは、接続と同時に行われる nsdatabase::connect() nsdatabase::create() nsdatabase::opne() の3つのAPIです。それぞれURIの指定パラメータで以下のように指定します。

tdap://ユーザー名@host/database?dbfile=schema&pwd=パスワード

尚、ホスト認証方式の場合は、"ユーザー@" "&pwd=パスワード"の部分は省略できます。(付加されていても無視されます)
これら3つのAPIのうちコネクションごとに最初に使われたものが認証に使用されます。接続が許可されれば以降、URIのユーザー名・パスワードは省略できます。

Transactd SDK 2016年07月15日(金) 18時12分33秒 doxygen