それを行うには他の方法があります。それはあなたがあなたの接続ストリングの後に誰が来ると思うか、そして彼らがどんなタイプのアクセスとスキルレベルを持っているかによります。接続文字列は、どのように隠そうとしても、どこかにあります。
接続文字列がハッキングされる可能性があることを知っているので、私は常にそれがハッキングされると想定し、もう一方の端で予防策を講じます。
DBサーバー側でいくつかのことを行い、接続文字列が侵害された場合でもデータが安全であることを確認します。
- 接続文字列に関連付けられているユーザーには、サーバーに対する実質的にゼロの権限があります。彼らが持っている唯一の権限は、ストアドプロシージャを含むスキーマに対するEXECUTEとCONTROLです。
- フロントエンドが持つ唯一のアクセスは、ストアドプロシージャを介したものです。フロントエンドがSQL文字列を送信することを許可することはありません。
- データは実行可能ファイルとは別のスキーマに保持されます。DATAスキーマでは、接続文字列に関連付けられたユーザーの権限はゼロであり、データを見たり、匂いを嗅いだり、触れたりすることはできません。
- ストアドプロシージャは、プロシージャを実行するのに十分な権限を持つログインしていないユーザーに権限を委任します。 (「ログインなしのユーザー」として実行)
これが私たちにできることのすべてです。接続文字列がどこかで何らかの方法で公開されるのを防ぐ方法は見つかりませんでした。
アレックスが以下に尋ねた質問に答えて。 (コメントするには長すぎます)
ノート。以下はMSSQLServerの場合で、他のDBMSシステムに適用される可能性がありますが、他のシステムには保証できません。
データベースにはスキーマが含まれ、スキーマにはテーブル、ビュー、ストアドプロシージャなどのデータベースオブジェクトが含まれます。 schmeaを使用すると、データベースオブジェクトを隔離できます。たとえば、誰でも表示できるテーブルのグループがある場合、セキュリティで保護する必要のある給与情報がある場合は、それらをCOMMONスキーマに入れることができます。それをPAYROLLスキーマに入れます。次に、その内部にあるオブジェクトのタイプに基づいて、SCHEMAにさまざまなセキュリティ対策を講じることができます。グラフィカルにそれらはハードドライブ上のフォルダのように見え、それらの下にはそれらが含むすべてのデータベースオブジェクトがあります。サーバーを起動すると、自動的に作成されるスキーマがいくつかあります。あなたが最もよく知っているのはDBOschmeaでしょう。管理者がこれをデフォルトのスキーマとして設定している場合は、気付かない可能性があります。
私たちが行うことは、すべてのデータをDATA schmeaに配置することです。これは、テーブルのみが許可されることを意味します。したがって、給与データベースがある場合、データテーブルはdataPayrollというスキーマに入ります。
ストアドプロシージャは、データベースサーバーが呼び出されたときに実行できる1つまたは複数のSQLコードのブロックです。データのテーブルまたは単一の値を返すことができます。 C#のメソッドと考えてください。
ストアドプロシージャには、SQLコードで使用される入力パラメータと戻りパラメータがあります。パラメータ化されたストアドプロシージャは、SQLインジェクション攻撃に対する強力な防御策です。
私たちのプロトコルによると、ストアドプロシージャとビューはすべて、「prog」が前に付いたスキーマに格納されます。したがって、給与データベースの場合、データではないすべてのオブジェクトはprogPayrollスキーマ内にあります。
その場合、接続文字列で定義されたユーザーは、「prog」スキーマに対する制御および実行権限のみを持ちます。これにより、ストアドプロシージャを呼び出すことができます。接続文字列で定義されたユーザーは、他のすべての権限を拒否されます。このユーザーは、他のすべての場所でもすべてのアクセス許可を拒否されます。ストアドプロシージャでは、データにアクセスするためのアクセス許可は、EXECUTEASコマンドを使用して「データ」スキーマからデータを取得するためのアクセス許可を持つNOLOGINユーザーに委任されます。
フロントエンドにSQLはありません。すべてのフロントエンドプログラマーは、ストアドプロシージャの名前、パラメーター、および戻り値のタイプと値を知っています。
このように、攻撃者がプログラムから接続文字列を引き出すことができたとしても、自分が持っているユーザーはストアドプロシージャしか実行できないため、データベースに対して何でもできるようにするためにやるべきことがたくさんあります。
このようなものが何であるかわからない場合は、DBプログラマーにシステムをセットアップしてもらう必要があります。