none
DB-Libraryを使用してのWindows認証でのSQLServer接続について RRS feed

  • 質問

  • キュラと申します。

    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 structure
    PLOGINREC  login;           // allocate a DB-LIB login structure
    DBSETLUSER(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名

    こんな感じです。
    アドバイスよろしくお願いします。
    2010年9月26日 6:30

回答

すべての返信

  • 検索しただけで外しているかもしれませんが、DBSETLSECUREを使うのではないでしょうか?

    Programming with DB-Library for C
    http://msdn.microsoft.com/en-us/library/aa936949(SQL.80).aspx

    dbsetlsecure
    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
    2010年9月26日 13:02
  •  自分もSQL Server 6.5→SQL Server 7.0に変わった時にWindows認証に変更しようと思ったんですけど、その当時、DB Libraryでは無理でした。

     と思いつつ、trapemiyaさんの書き込みをみてみたらSQL Server 2000 SP3からは対応されている(のかも)ですね。試してみる価値はあると思います。

     たたセキュリティの観点からであれば、SQL認証でも(いつの間にか)パスワードポリシーの適用ができるようになってるんですよね。Active Directoryとの連動を考えなければ、SQL認証のパスワードポリシーを適用するようにすれば、プログラムの修正は不要かもしれないです。
    (セキュリティポリシーにかかわってくるので、それを判断できる立場の人でないとというのはありますが)

    # 感想を書いただけで、あまり役に立たなかったらごめんなさい。
    # あとSQL Azureは(現時点では)SQL認証なんだよなぁ。(クラウド環境だからしょうがないけど)

    2010年9月26日 16:17
  •  補足です。

     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)が再配布可能か調べてみる必要もあります。

    2010年9月26日 22:57
  • trapemiyaさん。返信ありがとうございます。

     

    参考ページAPIのリファレンスもあり、とってもgoodでした。

    早速私のテスト環境でサンプルプログラム作成し試してみたところ、Windows認証でのオープン、クエリ発行まで正しく動作いたしました。

    (SQL Server 2000SP3、SQL Server 2005共)

     

    ありがとうございました。

    2010年9月27日 3:23
  • CatTailさん。返信ありがとうございます。

     

    予算がなくて今の環境での変更を依頼されてるんですよ。

    動作保証も切れているだろうし、動かなければ考えてくれるとは思うんですが。

     

    こんな感じで苦労しています。

    2010年9月27日 3:29