Skip to Content
Author's profile photo Sawa Ito

SAP SQL Anywhere 17 – データベース独立性の強化

このページは、以下の英語ページの抄訳です。最新の情報については、英語ページを参照してください。

 

デフォルトでは、データベースサーバーを起動すれば、実際に使う使わないにかかわらず、全ての機能にアクセスすることが可能です。

これらの機能の中には、 あなたが思いもよらないことをするために(悪意があるないにかかわらず)第3者がアプリケーションの一部として使用することが可能なものもあります。

 

例えば、ある第 3者は、データベースサーバーがファイルシステムにアクセスし、e-mail を送信し、web サービスを呼び出すということを利用して、マシンのセキュリティを脅かすことをするかもしれません。

アプリケーションの中でこれらの機能を使っている認識があれば、このような使われ方をする可能性に事前に気づき、問題を軽減するための適切に対処することができます。しかし、これらの機能をアプリケーションの中で使っていない場合には、問題が発生するまで気がつかないかもしれません。

バージョン 10 では、本番環境に配備された SQL Anywhere サーバーを第3者が誤って使用しないよう、アプリケーションを展開する際にデフォルトで利用できるサーバーの機能を開発者が制御できる機能をSQL Anywhereに追加しました。

これは、データベースサーバーの特定の機能を有効、無効にできる機能で、「Secure Feature」 機能と呼んでいます。例えば、xp_start/stop/sendmail プロシージャーを使わないのであれば、サーバーを実行する際にこの機能を無効にすることができます。

 

「Secure features」は、コマンドスイッチ (-sf <features>) で有効化します。特定の機能をランタイムで有効化/無効化するには、キー (-sk <key>) を使います。多くの機能を制御することが可能ですが、詳細についてはこちらを参照してください。
以下では、Secure Feature の機能を理解するために、新たに SQL Anywhere 17 で追加された新しい「secure feature」、データベースの独立性について説明します。

これが有効になっていると、1つのデータベースサーバー上で稼働しているそれぞれのデータベースは、そのデータベースサーバー上で稼働する唯一のデータベースであるかのように動作します。

同じサーバー上で稼働している他のデータベースのためにプロパティや接続情報をクエリする目的で、ある1つのデータベースへ接続することはできないようになっています。他のデータベースの起動・停止もできません。

新しいサーバーコマンドラインオプション -edi (enable database isolation) を使うと、データベースの独立性を有効にすることができます。また、secure feature database_isolation の機能を使うと、ある特定の接続に対して、アプリケーション側でデータベース独立性を無効にすることもできます。

これらの新しい 「secure feature」は、デフォルトでは有効になっており、グローバルに適用されるのではなく、特定のデータベースでのみ無効にすることができます。

具体的に説明するために、2つのデータベースを作成してみました。demo.db と demoprime.db です。これらのデータベースが稼働している状態でサーバーを起動すると、下のようになります。

  1. dbsrv17 -n J -edi demo.db demoprime.db

その後、dbisql からこれに接続し、“SELECT * FROM sa_db_info()” 文を実行すると、この同じサーバー上で稼働するどちらのデータベースも「見る」ことができることがわかります。

databaseisolation_disabled.JPG

ユーザーは、ある1つのサーバー上でどのデータベースが稼働しているのかわかるので、稼働中の他のデータベース(データベースと接続プロパティーと、例えばデータベースファイルの情報)に関する情報を見ることができてしまいます。これを防ぐために、独立性を有効にした状態でデータベースサーバーを実行することができます。

  1. dbsrv17 -n J -edi demo.db demoprime.db

dbisql からデモデータベースへ接続し、同じ “SELECT * FROM sa_db_info()” 文を発行しても、接続したデータベースに関することしかわかりません。

databaseisolation_enabled.JPG

sa_conn_info(), sa_db_properties(), etc…などの他のシステムプロシージャーでも結果は同様になります。 like sa_conn_info(), sa_db_properties(), etc… 接続されたユーザーが、同じデータベース上で稼働する他のデータベースの情報を「見る」方法はありません。

では、管理者に、この情報へのアクセスを許可したい場合はどうすればよいでしょうか?現在稼働しているサーバーの方法では、異なるオプションでそのサーバーを再起動しなければ、データベース独立性を無効にする方法はありません。

 

ある1接続のデータベース独立性機能の無効化を許可するには、sf/sk オプションを使用してキーを設定します。このキーを使えば、起動中のサーバー上であっても「secure features」を修正することができます。

  1. dbsrv17 -n J -edi -sf none -sk mysfkey demo.db demoprime.db

サーバーが稼働中で、データベース独立性が有効な場合には、同じサーバー上で稼働している他のどのデータベースの情報へもアクセスすることはできません。ある1接続のデータベース独立性を無効にするには、以下のプロシージャーコールを実行して、「secure feature」アクセスのキーを管理できるようにするとことで可能になります。

  1. CALL sp_use_secure_feature_key( ‘system’, ‘mysfkey’ );

database_isolation 機能と連携するキーを作成します。

  1. CALL sp_create_secure_feature_key( ‘dbiso’, ‘dbisokey’, ‘database_isolation’ );

これでキーを管理下のユーザーに配布することが可能です。ユーザーはこれを使用して自分の接続の database_isolation の機能を無効にすることができます。

  1. CALL sp_use_secure_feature_key( ‘dbiso’, ‘dbisokey’ );

この接続のデータベース独立性を再有効化するには、別のキーを作成します。

  1. CALL sp_use_secure_feature_key( ‘system’, ‘mysfkey’ );
  2. CALL sp_create_secure_feature_key( ‘disabledbiso’, ‘dbisokey’, ‘-database_isolation’ );
  3. CALL sp_use_secure_feature_key( ‘disabledbiso’, ‘dbisokey’ );

備考:データベース独立性が有効であっても、適切なユーティリティーのユーザーID とパスワードを使えば、アプリケーションはユーティリティデータベースに接続し、ユーティリティーアクションを実行することが可能です。しかしながら、ユーティリティーデータベースに接続された状態でのデータベースの起動・停止は制限されているため、データベースの起動・停止には、アプリケーション側で manage_database_isolation の secure feature を使用する必要があります。

 

 

 

 

===

 

SAP SQL Anywhere に関する詳細情報は、SAP SQL Anywhere Communityページ<英語> を参照してください。

 

上記のコミュニティーに掲載されている技術情報は、順次SQL Anywhere 日本語コミュニティ

に掲載しています。

 

SQL Anywhere に関してはまずはこちらをご参照ください。無期限でご利用いただける無償の Developers Edition もこちらからダウンロードが可能です。

 

SQL Anywhere に関して技術的な質問のある方はコミュニティに登録し、
「Ask a Question」機能をご利用ください。

Language には「Japanese」、
Primary Tag には「SAP SQL Anywhere」を選択
User Tagに「sql anywhere」「sql anywhere Japanese question」

を入力してください。

不具合につきましては、サポート契約者様専用の問い合わせ方法にてお問い合わせください。

 

======================
ご購入に関するお問い合わせ

こちらよりお問い合わせください。

Assigned Tags

      Be the first to leave a comment
      You must be Logged on to comment or reply to a post.