- - PR -
IIS5.0から6.0への移行でSQLサーバからテーブルが取得できない
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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を使うのは全く初めてなので基本的なことかも知れませんが、 アドバイスをいただけないでしょうか. | ||||||||
|
投稿日時: 2005-09-01 20:35
蛇足ですが、
ASP.NETの方は、ConnectionStringを移行後のデータベースサーバーの ものにしました。それ以外は、変えていません。 | ||||||||
|
投稿日時: 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/ | ||||||||
|
投稿日時: 2005-09-02 17:48
アドバイスありがとうございます。
試しに、新規プロジェクトをVisualStudioで作成し、表示できないテーブルをサーバエクスプローラからWebForm上にドロップした時に自動で作成されるConnectionStringとまったく同じものを使用しています。また、ついでにデータグリッドにバインドすると、きちんとデータを表示することができます。 ので、ConnectionStringの問題ではないような気がします。
こちらは、SQLサーバにログインできていないエラーに関するもののようですね。 先入観があってはならないのですが、ログインは、できていると思います。 何が原因なのか、まったくわからない状況です・・・。 | ||||||||
|
投稿日時: 2005-09-02 18:06
うーん。
・コネクションストリングは提示できませんか? 聞きたい理由は、接続方法をはっきりさせたいからです。 (パスワード等は伏せていただいていいのですが。) ・データベースのロール管理などは妥当ですか? ・ついうっかりsaなどの強力なユーザを使用していませんか? 思いつくのはこのあたりですねぇ。 _________________ ASP/ASP.NETだいすき。 ASP++ by Moo http://moo-asp.net/ 日記は ほぼ毎日更新中 http://d.hatena.ne.jp/aspx/ | ||||||||
|
投稿日時: 2005-09-03 09:50
どうも原因はテーブルの所有権関係のようです。
現在該当データベースのテーブルなどのオブジェクトは所有者がdboのものとabcのものとがあります。移行前の環境(ワークグループ、SQL認証)では、abcユーザーでデータベースサーバにつなげていたのでASP.NETのコード内に自前で記述したたとえば「SELECT * FROM テーブル名・・」のようなSQL文で問題が起こらなかったのですが、移行後の環境(ドメイン、Windows統合認証)では、SELECT * FROM abc.テーブル名・・」のように所有者を明示的に記述しないといけないのかなと思っています。実際実験的にそのようにすると、今まで読み取れなったテーブルが読み取れるようになりました。 ただ、他のすべてのページのソースコードを書き換えるのは、膨大な作業になりそうです。このあたり、少しこの会議室で質問するのは場違いなのかもしれませんが、ソースコードを書き換えないでデータベース側の設定でどうにかなるものなのでしょうか。 (データーベースオブジェクトの所有者をSP_changeobjectownerですべてdboに変えてしまうとWebアプリケーション以外のアプリケーションから使用できなくなってしまうので避けたいのですが・・) | ||||||||
|
投稿日時: 2005-09-03 11:35
こんにちは、いつもROMっています。
SQL Enterprise Managerでユーザーabcにdb_owner権限を与えれば、 いいのではないでしょうか。 見当違いでしたら、ご勘弁を。 | ||||||||
|
投稿日時: 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のワーカープロセスの実行アカウントの変更、もしくは偽装して、テーブルの所有者のアカウントに変更してあげれば良いのではないでしょうか? |