4

複数のユーザーをサポートし、インターネット経由でデータベースにアクセスできるようにする必要がある新しいシステムの作業を開始しようとしています。

システムは、Web ベースではなく、win32 であり、データベースはオフィスにあり、どこからでもアクセスできます。これがセキュリティ上の危険なアプローチであるかどうかはわかりませんが、提案を受け付けています

データベースは SQL Server で、システムは Delphi 6 で実装されます。

これを開始する方法を知っている人はいますか?レコードのロックも考慮する必要があります。

誰かが良い記事へのリンクを提供できれば幸いです。

乾杯

ポール

4

4 に答える 4

6

私見ですが、最も簡単な方法は、VPN を作成してデータベースをインターネット経由で安全に公開することです。

データベースへのアクセスは信頼できる VPN 接続を介してのみ可能になるため、セキュリティは非常に優れています。

また、インターネットをトンネルとして使用して、データベース パケットを安全に転送することで、どこからでもデータベースを利用できます。

そのため、Delphi コードは通常どおり、TCP/IP 接続を使用して VPN セキュア トンネル経由でデータベースに接続します。

Indy コンポーネントなどの Delphi 専用のアーティファクトを追加する必要はありません。また、Delphi 以外のクライアントのデータベースに接続できるようになります。これは、データベース ブラウジング ツールを使用することをお勧めします。

于 2010-10-29T08:48:01.083 に答える
2

データベースをインターネット上に公開すること、セキュリティ上のリスクです。セキュリティ上の欠陥は、リモートで簡単に悪用される可能性があります。

解決策は次のとおりです。

  1. 他の回答で述べたように、VPN。シンプルで安全ですが、両方のエンドポイント (クライアントと VPN サーバー) でいくつかの設定が必要です。また、標準の VPN を使用していない場合は、サーバー (または VPN ルーター/アプライアンス) とクライアントにも適切なソフトウェアが必要になる場合があります。プロトコル)。
  2. アプリケーション サーバーのみがインターネットに公開される n 層アプリケーション。アプリケーション サーバーと伝送チャネルを適切に保護する必要があります。クライアント側での設定が少なくて済む場合があります。Delphi 6 は n 層ライブラリとして Datasnap を提供します(CORBA も引き続きサポートしますが、D7 以降は廃止されました)。DCOM はあまりファイアウォール フレンドリーではありませんが (ただし、ファイアウォール全体で機能するように構成できます)、それ自体でチャネルをセキュリティで保護できます。他の 2 つのオプション (ソケットと HTTP) はセットアップが簡単ですが、セキュリティが少し劣ります (DCOM プロキシを使用して機能します。その結果、クライアント ID が失われ、チャネルを保護するためにカスタム コードまたは証明書が必要になります)。
  3. 3 つ目の解決策は、ユーザーがリモート デスクトップ経由でリモート接続できるようにすることですが、これにはライセンスと、リモート セッションの負荷を維持できるマシンが必要です。

レコードのロックは、データベース自体によって処理されます。後で予期しない事態にならないように、SQL Server のロック モードに関するドキュメントを注意深くお読みください。接続が十分に高速でない場合は、クライアント側で一部のデータをキャッシュすることを選択でき (TClientDataset はそのためにうまく機能します)、ロックの問題も軽減できますが、更新の競合が発生する可能性があります。

于 2010-10-29T10:13:24.800 に答える
1

実際には、経験、好み、利用可能なツールに応じて、数十のテクニックが可能です。ただし、BDEではなくADOを使用してデータベースに接続することをお勧めします。これを行うには、Delphiの一部であるADOコンポーネントを使用するか、msado15.dllタイプライブラリをプロジェクトにインポートして、生のADOAPI呼び出しを使用します。後者はもっと多くの経験を必要とします!
SQL Serverは、それ自体をインターネットに公開することができますが、これによりセキュリティ上のリスクが生じます。それでも、アクセスしたい人は接続を取得するためにユーザー名とパスワードが必要になり、SQLServerが使用するポートを開く必要があります。ただし、技術的には、インターネット経由でADOを使用するには、稼働中のサーバーのIPアドレスとログイン情報だけを知っておく必要があります。ただし、これはセキュリティ上のリスクです。そのため、ほとんどの開発者はSQL Serverをデータベースに公開せず、公開する特定のデータベース関数をラップするWebサービスを作成するだけです。
レコードロックはSQLServerが行うことであり、トランザクションを使用する場合は、さらに安全にすることができます。

結局、学習して読む必要があることは、アプリケーションで実行したいことによって大きく異なります。したがって、コードを書き始める前に、機能設計を書き始めて、必要なものとこれに必要なものの概要を把握してください。このドキュメントから、コードが実行する必要があることをより正確に説明するための技術ドキュメントの作成を開始します。これを入手したら、必要なものについてより直接的な質問をすることができますが、現時点ではわかりません。

于 2010-10-29T10:21:51.500 に答える
1

おそらく、TCP/IP を介して通信するクライアント サーバー システムを意味します。

これは、Indy コンポーネントを使用して作成できます。使い方は簡単ではないので、例を確認してください。ただし、それらに関連するほとんどすべてのネットワークを作成できます。

于 2010-10-29T08:20:59.480 に答える