トップ回答者
DB-Libraryを使用してのWindows認証でのSQLServer接続について

質問
-
キュラと申します。
10年以上前に作られたSQL ServerにアクセスするCのプログラムを修正することになりました。修正内容は、セキュリティ強化の観点からSQL Server認証で接続しているプログラムをWindows認証で接続するように変更するというものです。今現在の開発環境はVC++6.0で、Ntwdblib.lib(DB-Library import library for Microsoft Win32.)を利用してSQL Serverにアクセスしています。APIの資料がなく、どのように修正して良いか分からず、ご存じの方教えていただけないでしょうか。ここを見れば分かるよという助言でも結構です。
参考までに現在のSQL Server認証のロジックは以下の通りです。
#include "sqlfront.h"#include "sqldb.h"・・・・・・//SQL Severに接続するdbinit(); /* initialize dblib */dberrhandle((int(__cdecl *)(void*,int,int,int,const char*,const char*))SQLFARPROC(err_handler));dbmsghandle((int(__cdecl *)(void*,long,int,int,const char *,const char *,const char *,unsigned short))SQLFARPROC(msg_handler));
PDBPROCESS dbproc; // allocate a DB-LIB process structurePLOGINREC login; // allocate a DB-LIB login structureDBSETLUSER(login, dbuser); // dbuser=SQL Server認証のユーザー名(一昔前は="sa")DBSETLPWD(login, dbpass); // dbpass=SQL Server認証のパスワード(一昔前は="")DBSETLHOST(login, myname); // myname=コンピュータ名DBSETLAPP(login, "Hoge"); // Hoge=実行プログラム名
dbproc = dbopen(login, ServerName); // ServerName=SQL Server名
こんな感じです。アドバイスよろしくお願いします。
回答
-
検索しただけで外しているかもしれませんが、DBSETLSECUREを使うのではないでしょうか?
Programming with DB-Library for C
http://msdn.microsoft.com/en-us/library/aa936949(SQL.80).aspxdbsetlsecure
http://msdn.microsoft.com/en-us/library/aa937056(SQL.80).aspx
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/- 回答としてマーク キュラ 2010年9月27日 3:13
すべての返信
-
検索しただけで外しているかもしれませんが、DBSETLSECUREを使うのではないでしょうか?
Programming with DB-Library for C
http://msdn.microsoft.com/en-us/library/aa936949(SQL.80).aspxdbsetlsecure
http://msdn.microsoft.com/en-us/library/aa937056(SQL.80).aspx
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/- 回答としてマーク キュラ 2010年9月27日 3:13
-
自分もSQL Server 6.5→SQL Server 7.0に変わった時にWindows認証に変更しようと思ったんですけど、その当時、DB Libraryでは無理でした。
と思いつつ、trapemiyaさんの書き込みをみてみたらSQL Server 2000 SP3からは対応されている(のかも)ですね。試してみる価値はあると思います。
たたセキュリティの観点からであれば、SQL認証でも(いつの間にか)パスワードポリシーの適用ができるようになってるんですよね。Active Directoryとの連動を考えなければ、SQL認証のパスワードポリシーを適用するようにすれば、プログラムの修正は不要かもしれないです。
(セキュリティポリシーにかかわってくるので、それを判断できる立場の人でないとというのはありますが)
# 感想を書いただけで、あまり役に立たなかったらごめんなさい。
# あとSQL Azureは(現時点では)SQL認証なんだよなぁ。(クラウド環境だからしょうがないけど) -
補足です。
DB-Library自体が、現状ではもうサポートされていませんので、その修正するアプリケーションのライフサイクルを考えて、今後もアプリケーションを使い続け、かつSQL Serverのバージョンアップが必要であるのであれば、ADOないしはADO.NETへの移行も考えた方がいいと思います。
あえてADOも含めたのは、DB-LibraryからADOへの移行は比較的楽に移行できますが、ADO.NETへの移行は(少し? かなり?)大変です。
ADOなら、あまり変な事を行っていなければ、命令の置き換えでほぼ移行できるはずです。※SQL Server 2000まではDB-Libraryのモジュールがメディアに含まれていましたが、SQL Server 2005以降は含まれなくなっています。
一応、DB-Libraryのモジュールが入って入れば、現状で最新バージョンであるSQL Server 2008 R2のデータベースもアクセスできますが、DB-Library(Ntwdblib.lib)が再配布可能か調べてみる必要もあります。