- PR -

IIS5.0から6.0への移行でSQLサーバからテーブルが取得できない

投稿者投稿内容
みな
常連さん
会議室デビュー日: 2001/08/18
投稿数: 32
投稿日時: 2005-09-01 20:27
いつもお世話になります。
IIS5.0(Windows2000Server,ワークグループ)+MSDE(SQL認証)+ASP.NETで
作成したWebアプリケーションを
IIS6.0(WindowsServer2003,ドメイン)+SQLServer(統合認証)+ASP.NETへ
移行したいのですが、
テーブルやストアドプロシージャやインライン関数などにASP.NETがアクセスすると
オブジェクト名'(テーブルの名前など)’は無効です。
というエラー(SqlExceptionが投げられる)になってしまします。

この現象は、すべてのオブジェクトで発生するわけではなく、一部のテーブルでは、
きちんとデータの表示や更新等はできます。
もちろん、移行前のIIS5.0では、このWebアプリケーションは問題なく動いていました。
データベースの移行は、デタッチ、アタッチの後、NETWORK SERVICEを該当データベース
にログインを作成し、権限付与も行っています。VisualStudioのサーバーエクスプローラ
からどのテーブルも取得できます。

IIS6.0を使うのは全く初めてなので基本的なことかも知れませんが、
アドバイスをいただけないでしょうか.
みな
常連さん
会議室デビュー日: 2001/08/18
投稿数: 32
投稿日時: 2005-09-01 20:35
蛇足ですが、
ASP.NETの方は、ConnectionStringを移行後のデータベースサーバーの
ものにしました。それ以外は、変えていません。
Moo
大ベテラン
会議室デビュー日: 2004/04/12
投稿数: 118
お住まい・勤務地: 地球・港
投稿日時: 2005-09-02 08:59
ConnectionStringに問題があると思われるのですが...

以下のエントリが参考になりませんか?

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=24067&forum=7&9

_________________
ASP/ASP.NETだいすき。 ASP++ by Moo http://moo-asp.net/
日記は ほぼ毎日更新中 http://d.hatena.ne.jp/aspx/
みな
常連さん
会議室デビュー日: 2001/08/18
投稿数: 32
投稿日時: 2005-09-02 17:48
アドバイスありがとうございます。
引用:

Mooさんの書き込み (2005-09-02 08:59) より:
ConnectionStringに問題があると思われるのですが...


試しに、新規プロジェクトをVisualStudioで作成し、表示できないテーブルをサーバエクスプローラからWebForm上にドロップした時に自動で作成されるConnectionStringとまったく同じものを使用しています。また、ついでにデータグリッドにバインドすると、きちんとデータを表示することができます。
ので、ConnectionStringの問題ではないような気がします。

引用:

Mooさんの書き込み (2005-09-02 08:59) より:
以下のエントリが参考になりませんか?
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=24067&forum=7&9


こちらは、SQLサーバにログインできていないエラーに関するもののようですね。
先入観があってはならないのですが、ログインは、できていると思います。

何が原因なのか、まったくわからない状況です・・・。
Moo
大ベテラン
会議室デビュー日: 2004/04/12
投稿数: 118
お住まい・勤務地: 地球・港
投稿日時: 2005-09-02 18:06
うーん。

・コネクションストリングは提示できませんか?
 聞きたい理由は、接続方法をはっきりさせたいからです。
(パスワード等は伏せていただいていいのですが。)

・データベースのロール管理などは妥当ですか?

・ついうっかりsaなどの強力なユーザを使用していませんか?

思いつくのはこのあたりですねぇ。
_________________
ASP/ASP.NETだいすき。 ASP++ by Moo http://moo-asp.net/
日記は ほぼ毎日更新中 http://d.hatena.ne.jp/aspx/
みな
常連さん
会議室デビュー日: 2001/08/18
投稿数: 32
投稿日時: 2005-09-03 09:50
どうも原因はテーブルの所有権関係のようです。
現在該当データベースのテーブルなどのオブジェクトは所有者がdboのものとabcのものとがあります。移行前の環境(ワークグループ、SQL認証)では、abcユーザーでデータベースサーバにつなげていたのでASP.NETのコード内に自前で記述したたとえば「SELECT * FROM テーブル名・・」のようなSQL文で問題が起こらなかったのですが、移行後の環境(ドメイン、Windows統合認証)では、SELECT * FROM abc.テーブル名・・」のように所有者を明示的に記述しないといけないのかなと思っています。実際実験的にそのようにすると、今まで読み取れなったテーブルが読み取れるようになりました。
ただ、他のすべてのページのソースコードを書き換えるのは、膨大な作業になりそうです。このあたり、少しこの会議室で質問するのは場違いなのかもしれませんが、ソースコードを書き換えないでデータベース側の設定でどうにかなるものなのでしょうか。
(データーベースオブジェクトの所有者をSP_changeobjectownerですべてdboに変えてしまうとWebアプリケーション以外のアプリケーションから使用できなくなってしまうので避けたいのですが・・)
OpS
ベテラン
会議室デビュー日: 2003/12/09
投稿数: 50
投稿日時: 2005-09-03 11:35
こんにちは、いつもROMっています。
SQL Enterprise Managerでユーザーabcにdb_owner権限を与えれば、
いいのではないでしょうか。

見当違いでしたら、ご勘弁を。
trapemiya
大ベテラン
会議室デビュー日: 2005/07/30
投稿数: 102
投稿日時: 2005-09-03 12:00
ここのページによると、
http://www.microsoft.com/japan/msdn/sqlserver/columns/T-SQL/T-SQL1.asp
テーブルの所有者名を省略した場合、所有者は、自分自身あるいはdboになると書かれています。

現在、IIS6.0のワーカープロセスの実行アカウントであるNetwork Serviceでログインしていると思われますので、所有者名を省略した場合、テーブルにアクセスできなくなるのではないでしょうか?

権限というより名前解決の問題のような気がしますので、IIS6.0のワーカープロセスの実行アカウントの変更、もしくは偽装して、テーブルの所有者のアカウントに変更してあげれば良いのではないでしょうか?

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