10

素早い...

接続文字列にユーザー名とパスワードを使用せずに、 Windows で実行されているMono SQL クライアントで Windows 認証を SQL Server に使用する方法を教えてください。

もっと...

  • アプリの一部のコンポーネントで複数のプラットフォームをサポートするには、Mono を使用する必要があります。
    これは、変更できない外部の制限です。

  • Windowsでのみデータベースにアクセスするコンポーネントを実行します
    Mono SQL クライアントの移植性/OS に依存しない機能には何の価値もありません

つまり、Windows 以外で実行されているコンポーネントは、SQL Server データベースにアクセスしません。

  • プロセスは、一部の Windows ユーザー (実際のユーザー、サービス アカウントなど) の下で実行されます。

  • ユーザー名とパスワードを埋め込むことは悪いこと
    です。

では、Mono SQL クライアントがプロセスを実行しているユーザーの NT ログオン トークンを読み取り、これを SQL Server に渡すことができるようにするにはどうすればよいでしょうか? MS .net と同じように?

  • 十分に文書化されていないフラグまたは設定はありますか

  • 独自の拡張機能を実装する必要がありますか?
    もしそうなら、私たちは本当にこれをやりたいと思った最初の人々ですか?

Mono および SQL-Server とタグ付けされた (現在) 他の 5 つの質問があります: 彼らはこれに答えていません...

4

2 に答える 2

10

これを実現するのは、思ったほど簡単ではありません。ご存じのとおり、Mono SqlClientは NT 認証をサポートしています。

NT 認証の接続文字列形式: サーバー=ホスト名;データベース=データベース名;ユーザー ID=windowsDomain\windowsUserid;パスワード=windowsPassword;統合セキュリティ=SSPI

Integrated Security=SSPIしかしもちろん、 NT 認証ハンドシェークで現在のプロセス資格情報を使用できるようにするため、より単純な形式が必要です。そして、ここに問題があります。現在のプロセスのユーザー名 (ID) を取得するのは簡単ですが、プロセスが自身の資格情報passwordを検出することは不可能です。NT 認証を行う場合、Windows プロセスは実際には認証を行いませんが、代わりにLocas Security Authority (別名 LSASS.EXE、トリビア: デバッガーを接続しないでください ;)) にこのプロセスの認証を求めます。つまり、同じことを達成したいライブラリは同じプロトコルを使用する必要があります。LSA に認証を依頼します。好奇心旺盛な方のために、実際の詳細は、 SSPI の使用で説明されているようにAcquireCredentialHandleInitializeSecurityContext、 、のシーケンスです。AcceptSecurityContext. 私は SqlClient の mono ソースを調査していませんが、 SSPIではなく、認証に何らかのGSS-APIライブラリを使用していると確信しています。したがって、定義上、 LSA に代わって Kerberos 交換を行うのではなく、自分でKerberos 交換を行うため、パスワードを知っている必要があります。

お分かりのように、これは憶測であり、私の側の推測にすぎませんが、別の話を聞くと驚かれることでしょう。Mono.Data.Tds をフォークまたはパッチし、GSS の代わりに SSPI を使用するように認証実装を変更することは確かに可能ですが、定義上、これは移植性のない Windows 固有の実装になります。Mono の最大の魅力はWindows 固有ではないということを考えると、それに対するインセンティブはほとんどないと思います。自分で実装する必要があるのではないかと心配しています。

于 2012-05-07T18:37:22.347 に答える
1

NTLM Authorization Proxy Serverを使用し、プロキシ経由で SQL Server に接続します。

于 2012-05-14T12:32:55.430 に答える