猫と水槽

その他 Web系のカテゴリーです。

スポンサーサイト

--年--月--日 --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--年--月--日 --:-- トラックバック(-) コメント(-)

PerlからOracleをアクセスしようとして嵌ったのでメモ

2015年11月27日 16:47

PerlからOracleをアクセスしようとして嵌ってしまい、ネット検索するも古い記事ばかり

やっと解決したのでメモしときます!!
OS  Windows Server 2008 R2 Standard Service Pack 1
Perl  ActivePerl-5.20.2.2002-MSWin32-x64-299195.msi
Apache  httpd-2.4.17-win64-VC14.zipを解凍して、'C:/Perl64へまるごとコピー
Visual Studio 2015用の最新のC ++再頒布可能パッケージvc_redist.x64.exeをインストール


きっかけはPerlからOracleをアクセスした時にApacheに以下のエラーが発生するところから始まった
AH01215: install_driver(Oracle) failed: Can't locate DBD/Oracle.pm in @INC (you may need to install the DBD::Oracle module) (@INC contains: C:/Perl64/site/lib C:/Perl64/lib .) at (eval 5) line 3.

Oracle.pmが無いと怒られて調べてみると確かに無い!!

PPMで確認するとDBD-Oracleはデフォルトで1.74が存在するのですが、念のためMark for installで追加するとsiteにDBD-Oracle1.74がインストールされた。

すると、上記エラーは出なくなり、Oracle.pmもできてる@@
ところが今度は
AH01215: install_driver(Oracle) failed: Can't load  'C:/Perl64/site/lib/auto/DBD/Oracle/Oracle.dll' ・・・

どうやらOracle.dllが読めないよと怒っているようだが、ちゃんと実在するのです。
このエラーが出てからまたまたネット検索の毎日。

やっとのおもいでOracle Instance Clientをダウンロードして、この中にあるoci.dllを./Perl64/bin配下にコピーすれば良さそうだとの情報を見つけてやってみた。

最新版の64bit用を入手すれば良いだろうとOracleサイトからWindows用のInstance Client Basic 12.1 64bitをダウンロード
instanceclient-basic-windows .x64-12.1.0.2.0.zip

zipを解凍するとoci.dll以外にも複数のdllがあったので7個ともまとめてPerl64/bin配下にコピー

ところが、現象は変わらず
AH01215: install_driver(Oracle) failed: Can't load  'C:/Perl64/site/lib/auto/DBD/Oracle/Oracle.dll' ・・・


それからさ迷うこと数日
結果はinstanceclient-basic-windows .x64-12.*.*.*.*.zipはOracle 12g用で、アクセスしたかったOracleは11gだったというお粗末な話し。
instanceclient-basic-windows .x64-11.2.0.4.0.zipをダウンロードしなおして、この中のdllをPerl64/bin配下にコピーして完了!!
※Windowsの場合、 PATH環境変数で設定された場所ならOKのようです。

ちなみに、PHPの場合はWindows/system32配下に同じものをコピーして、php.iniの900行付近にある
;extension=php_oci8.dll ; Use with Oracle 10gR2 Instant Client
;extension=php_oci8_11g.dll ; Use with Oracle 11gR2 Instant Client
をOracleのバージョンに合わせてコメントアウトを解除してやったら動作しました^^

その後、7個のdll
oci.dll
ocijdbc11.dll
ociw32.dll
ornnzsbb11.dll
oraocci11.dll
oraociei11.dll
orasql11.dll
のうち、oci.dll と oraociei11.dll の2個のDLLが存在すれば接続のみはOKでしたが、他の処理でエラーが出るのが怖いので7個ともコピーしときました。

スポンサーサイト

2015年11月27日 16:47 トラックバック(0) コメント(0)

Apache2.4(Windows版x64)にWindowsドメイン認証を利用して、シングルサインインを実装する

2013年11月24日 13:33

今回のWebサーバー再構築では前回までの記事のとおり、2013/11/15現在の最新版をインストールしましたが、過去に作成したPerlスクリプトが動作しなかったりと、毎度おなじみの嵌ってはネット検索の繰り返しです。

その中で、今回Crypt::PasswdMD5のモジュール呼び出し失敗のログはモジュールの追加で回避できたものの、そもそも何で社内イントラ内部なのにわざわざ認証していたかと考えた時、単にオペレータを認識したかっただけだと言う2年前の妥協点に遡り、今回はドメイン認証を利用したシングルサインインを実装することにしました。

ネット検索のフレーズとして「Apache2.4 ドメイン認証」で検索するとなかなか目的の情報にヒットせず、「Apache ドメイン認証」で検索した、Windows上のApache httpdでドメイン認証を使うの記事を参考にさせていただき、http://sourceforge.net/projects/mod-auth-sspi/からmod_auth_sspiをダウンロードして設定したのですが、Aapcheが起動しなくなり、起動時のエラーを元にまたまたネット検索のはじまりはじまり・・・
Last Updateは 2013-05-01 となっているものの、しっかりとmod_auth_sspi - Apache 2.x SSPI authentication module which let Apache 2.x users authenticate against Win32 domains.と書いてあるし、実際に解凍したモジュールの更新日は2006/05/17でした。

それならば、64bit版があれば動作するのでは!?と「mod_auth_sspi 64bit」で検索して、Index of /package/kmx/mod_auth_sspi/x64に置いてある、mod_auth_sspi.soとsspipkgs.exeを使ってみると、やはりApacheが起動しない!!しかもログさえ更新されないので何が問題なのかすら分からない

それからは、英文の掲示板やらを翻訳しながら四苦八苦してやっと成功したので、同じ苦労をする人が減るように記事に残します

結論はmod_auth_sspiでは無く、mod_authnz_sspiを使え!!

Apache Hausに置いてあるmod_authnz_sspi-0.1.0a1-2.4.x-x64-r2.zipをダウンロードして解凍する。[版数はその時点の最新版を使用]

②解凍したフォルダ内のApache/binにあるsspipkgs.exeをサーバーのApache24/bin配下へコピー

③解凍したフォルダ内のApache/moduleにあるmod_authnz_sspi.soをサーバーのApache24/module配下へコピー

④Apache24/confのhttpd.confに以下の記述を追加。[場所は最終行でも可能]


<IfModule !mod_authnz_sspi.c>
LoadModule authnz_sspi_module modules/mod_authnz_sspi.so ⇐ モジュール読み込みの記述は添付されているmod_auth_sspi.confでは LoadModule sspi_auth_module modules/mod_authnz_sspi.so と記載されているが、そのままではエラーとなるので、コピペした場合は必ず書き換える
</IfModule>
#
# Configuration for mod_auth_sspi
<IfModule mod_authnz_sspi.c>
<Location />
AuthName "A Protected Place"
AuthType SSPI
SSPIOmitDomain on ⇐ 私の環境ではドメインユーザIDだけが必要だったのでオプションを追記
SSPIAuth On
SSPIAuthoritative On
SSPIOfferBasic On
# SSPIBasicPreferred
# SSPIUsernameCase lower
require valid-sspi-user
</Location>
</IfModule>
# End of mod_authnz_sspi.


以上で、ドメインにログインしているユーザは認証無しで開き、ドメインにログインしていないユーザがアクセスすると認証画面が表示するWebサーバーが構築できました。

新しいバージョンで構築しようとすると、日本語のサイトがなかなかヒットしないので、このメモがお役に立てると幸いです。

ちなみに、この答えはApache LoungeのWill there be a mod_auth_sspi for 2.4?の掲示板の中段以降のPosted: Tue 25 Sep '12 14:54の記事からたどり着きました

2013年11月24日 13:33 トラックバック(0) コメント(0)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。