@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

WebアプリからSQLへのアクセスについて

1
投稿者投稿内容
ルーキー
常連さん
会議室デビュー日: 2006/05/08
投稿数: 20
投稿日時: 2008-05-08 16:34
ASP.NETでSQL2005にアクセスするアプリケーションを作っています。

SQLサーバー認証でつなぐ場合、たとえばIDをABCとすれば、
100人がWebアプリからつなぎにきても、SQL上のユーザーはABCの
一人になりますが、処理のパフォーマンスとしては、接続ごとに
別ユーザーとしてつないだほうが高いのでしょうか?
それともあまり変わらない、もしくは分けた方が下がるとかでしたら、
現状のままで問題ないのですが・・・

色々なページを見てもいまいちはっきりしないもので。。。
アドバイス宜しくお願いします。
無名tiger
常連さん
会議室デビュー日: 2008/04/18
投稿数: 36
投稿日時: 2008-05-08 17:16
理論上同じユーザーのほうが早いと思います。
1)ユーザー認証、権限認証の部分少し早くなると思います。
2)コネクションプーリングを使う場合、接続文字列が違ったら、コネクションの使い回しできないと思います。

以上個人の見解です。
100%正しいとは保証できませんのでご了承下さい。

[ メッセージ編集済み 編集者: 無名tiger 編集日時 2008-05-08 17:30 ]
ルーキー
常連さん
会議室デビュー日: 2006/05/08
投稿数: 20
投稿日時: 2008-05-09 09:08
アドバイスありがとうございます。
確かに仰るとおり、同じユーザーであれば、
セッションが切れるまで(デフォルト30秒?)認証が入らない為、
理論上は早くなるという意見には大納得です。
大変参考になりました。
ありがとうございました。
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-05-09 19:26
(もう終わっていると思いますが)

100人分のユーザーがいた場合
新しいユーザーなら追加、ユーザーがいなくなれば削除する?(手で?)
パスワードは誰が決めるの?(誰が?)
ルーキー
常連さん
会議室デビュー日: 2006/05/08
投稿数: 20
投稿日時: 2008-05-09 23:25
もし分けたほうが早いのであれば、
考えていたやり方としては、もちろん不特定多数なので全員は無理ですが、
100ほどIDを作っておき、(ABC+数字(1〜100)など)
つなぐタイミングで数字の部分はランダムで1〜100をはじき、
それぞれ異なる(全部ではないですが)ユーザーで繋ごうかと
考えておりました。
ですので、削除するのではなく、あらかじめ作っておいた複数のIDを
ユーザーで使いまわそうかなと。。。
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2008-05-10 17:52
DB に接続する user を分けた場合の利点としては、下記のものがあると思います。

  • DBMS の access control を利用可能
    DBMS で access control を厳密にしていれば SQL injection されようが関係ないですね。
  • DBMS 機能で簡単確実に traceability を確保できる
    J-SOX 対応のためとかで増えてますね。


ご参考までに。
_________________
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-05-11 21:59
引用:

ルーキーさんの書き込み (2008-05-09 09:08) より:
アドバイスありがとうございます。
確かに仰るとおり、同じユーザーであれば、
セッションが切れるまで(デフォルト30秒?)認証が入らない為、
理論上は早くなるという意見には大納得です。
大変参考になりました。
ありがとうございました。


え?どういう意味ですか?無名tigerさんは、そんなことおっしゃってないと思います。

 「セッションが切れるまで」の“セッション”とは、ASP.NET のセッションのことでしょうか?そうであれば、セッションが切れても接続は残っていますよ?
 それとも、データベースとのセッションのの事でしょうか?それって、30秒で切れるんだっけ?いや、「認証が入らない」ってのがわからないなぁ。

 Open して Close しても、デフォルトの設定では、データベース側は「接続されている」と認識したままです(データベース セッションは保持されている)。このとき、ADO.NET が接続を、「接続プール」と呼ばれるところに保持しています。同じ接続文字列で Open をすると、このプールから接続が渡されます。したがって、ASP.NET のセッションが切れていようが別のセッションだろうが、接続プールから渡される接続を使う限り、認証は行われません。
 しかし、ASP.NET は、一度に複数の人がアクセス可能です。誰かが Open して、Close していなければ、接続プールに接続情報がないため、もう一つ、データベース セッションが作られます。このとき、認証が行われます。
 また、接続プールを使わないようにしている場合は、Open ごとにセッションが作られ、Close ごとに破棄されます。

 Server 製品のライセンスの方が問題になるんじゃないかと思います。


追加
「ADO.NET が」って、ちげー。ODP.NET などの接続に使っているもの、ですね。

[ メッセージ編集済み 編集者: Jitta 編集日時 2008-05-11 22:02 ]
ルーキー
常連さん
会議室デビュー日: 2006/05/08
投稿数: 20
投稿日時: 2008-05-13 14:52
アドバイスありがとうございます。
私の書き方が下手で申し訳ないですが、
要はJittaさんの仰ってることに近いことを言いたかっただけです。。。
セッションはDBのです。(たしかSQL2005はデフォルト30秒だったような・・・)
ちなみに接続プールは使用しています。
使用しないとCPU使用率が厳しくなったので。
詳しい説明ありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)