none
セキュリティーの設定 RRS feed

  • 質問

  • いつも大変お世話になってます。

    ASP.NETの初心者です。セキュリティーの設定についての質問です。

    開発環境 VS2010, ASP.NET4.0, C#, SQL Server Express

    レンタルサーバー ExpressWeb, SQL Server 2008

    書籍に記載のサンプル日記アプリを作成して、レンタルサーバーでアプリを試しています(書籍にはレンタルサーバーの登録法は載っていない)。

    いろいろ調べて、日記webアプリをレンタルサーバーで表示することは出来ました。

    しかし、問題があります。日記作成ページをAdminフォルダ内において、管理者のみ、この日記作成ページにアクセス出来るように、VS2010の「ASP.NET Webサイト管理ツール」でロール、ユーザーの設定をしました。 VS2010での実行では、管理者のみアクセス可能ですが、レンタルサーバーでは、誰でもアクセス出来てしまいました。

    調べたところ、「ASP.NET Webサイト管理ツール」で設定すると、ASPNETDB.MDFというファイルが出来て、この中に複数のテーブルが生成されるようです。

    解決方法としては、レンタルサーバーは SQL Server 2008 なので、レンタルサーバー側で手動で再度、DB、テーブルを作成する方法で、よろしいでしょうか?

    良い解決方法があれば、御伝授お願いします。

    2012年7月2日 15:06

回答

  • > 大変参考になります。しかし、初心者には、ちょっと難しいそうにも思います。
    > とりあえず、さきほど、ExpressWeb に相談メールを送ってみました。
    > その回答を参考にしようと考えています。

    先のレスで書き忘れましたが、データベースが存在しなくてもサー
    バーエラーにならない点が気になります。でも、何にせよデータベ
    ースがないと始まらないので、まずはレンタルサーバー会社の SQL
    Server に  ASPNETDB.mdf 相当のデータベースを作ってください。

    小野さんが紹介されているページがリンク切れなので、データベー
    スを作成するための手順を簡単に書いておきます。

    (1) まずは、レンタルサーバ会社が提供しているツールを使って、
      SQL Server にデータベースを作成してください。その時点で
      データベース名(接続文字列の Initial Catalog に設定する
      名前)を指定するはずです。

    (2) 次に、自分の開発マシンで、aspnet_regsql.exe を利用して、
      必要な機能(テーブル、ストアドプロシージャ等)を BD に追
      加に使用できる SQL スクリプトファイルを生成します。

      aspnet_regsql -sqlexportonly <filename> -A all -d <database>

      上記コマンドで、<database> には (1) で指定したデータベー
      ス名にします。<filename> には  SQL スクリプトファイルの
      名前を指定します。

    (3) SQL Server の管理ツールとしてレンタルサーバー会社が提供し
      ている myLittleAdmin を使用して、スクリプトを走らせ、DB
      にテーブル、ストアドプロシージャを作成します。

    (4) 接続文字列を実環境に合わせて修正します。詳しくはレンタル
      サーバー会社に確認してください。

    (5) ここまでで ASPNETDB.mdf 相当の DB が生成され、Web アプリ
      から接続できるようになっているはずです。ただし、DB の中身
      は空なので、自分でユーザー登録とロールの設定が必要です。

    管理用のアプリを作るなりしないと (5) はできないので少々面倒か
    も知れません。

    それができなければ、Database Publishing Wizard で開発環境のユ
    ーザー登録やロールの設定済みの ASPNETDB.mdf からスクリプトを
    生成すれば、上記 (5) の手順は不要のはずです。

    DB Publishing Wizard
    http://surferonwww.info/BlogEngine/post/2010/09/23/DB-Publishing-Wizard.aspx


    あと、今回の問題とは関係ないことですが、ExpressWeb のサーバー
    は Web ファーム構成という話を聞きました。もしそうだとすると
    MachineKey を手動で設定する必要がありますのでお忘れなく。

    How To: ASP.NET 2.0 で MachineKey を構成する方法
    http://msdn.microsoft.com/ja-jp/library/ms998288.aspx

    • 回答としてマーク noriyasu 2012年7月5日 14:47
    2012年7月3日 12:43

すべての返信

  • > 解決方法としては、レンタルサーバーは SQL Server 2008 なので、レンタル
    > サーバー側で手動で再度、DB、テーブルを作成する方法で、よろしいでし
    > ょうか?

    「ASP.NET Webサイト管理ツール」ではレンタルサーバーに ASPNETDB.MDF フ
    ァイルは作れません。

    と言って、レンタルサーバー会社に、自分が作った ASPNETDB.MDF を送って
    アタッチしてもらうのは望み薄と思います。

    ExpressWeb のサイトを見てみましたが、管理ツールとして myLittleAdmin が
    使えるそうなので、aspnet_regsql.exe で作ったスクリプト、もしくは
    Database Publishing Wizard で ASPNETDB.MDF から作ったスクリプトで
    ASPNETDB.MDF ファイルを生成できると思います。

    以下のサイトが参考になると思います。

    VWD WEB公開について
    http://social.msdn.microsoft.com/Forums/ja-JP/vwdexpressja/thread/1dba939e-fcf6-47b1-a9ad-995bd13299b2/

    ただし、mdf ファイルを作っただけではダメで、接続文字列の修正なども必要
    になるはずです。

    ExpressWeb に相談してみてください。接続文字列その他の Web.config の設定
    など、サーバー会社に聞かないと分からないことがあります。

    2012年7月2日 15:50
  • SurferOnWww様

    さっそくの返信ありがとうございます。いつも大変お世話になってます。

    大変参考になります。しかし、初心者には、ちょっと難しいそうにも思います。

    とりあえず、さきほど、ExpressWeb に相談メールを送ってみました。

    その回答を参考にしようと考えています。

    また、よろしくお願い致します。

    2012年7月2日 22:12
  • > 大変参考になります。しかし、初心者には、ちょっと難しいそうにも思います。
    > とりあえず、さきほど、ExpressWeb に相談メールを送ってみました。
    > その回答を参考にしようと考えています。

    先のレスで書き忘れましたが、データベースが存在しなくてもサー
    バーエラーにならない点が気になります。でも、何にせよデータベ
    ースがないと始まらないので、まずはレンタルサーバー会社の SQL
    Server に  ASPNETDB.mdf 相当のデータベースを作ってください。

    小野さんが紹介されているページがリンク切れなので、データベー
    スを作成するための手順を簡単に書いておきます。

    (1) まずは、レンタルサーバ会社が提供しているツールを使って、
      SQL Server にデータベースを作成してください。その時点で
      データベース名(接続文字列の Initial Catalog に設定する
      名前)を指定するはずです。

    (2) 次に、自分の開発マシンで、aspnet_regsql.exe を利用して、
      必要な機能(テーブル、ストアドプロシージャ等)を BD に追
      加に使用できる SQL スクリプトファイルを生成します。

      aspnet_regsql -sqlexportonly <filename> -A all -d <database>

      上記コマンドで、<database> には (1) で指定したデータベー
      ス名にします。<filename> には  SQL スクリプトファイルの
      名前を指定します。

    (3) SQL Server の管理ツールとしてレンタルサーバー会社が提供し
      ている myLittleAdmin を使用して、スクリプトを走らせ、DB
      にテーブル、ストアドプロシージャを作成します。

    (4) 接続文字列を実環境に合わせて修正します。詳しくはレンタル
      サーバー会社に確認してください。

    (5) ここまでで ASPNETDB.mdf 相当の DB が生成され、Web アプリ
      から接続できるようになっているはずです。ただし、DB の中身
      は空なので、自分でユーザー登録とロールの設定が必要です。

    管理用のアプリを作るなりしないと (5) はできないので少々面倒か
    も知れません。

    それができなければ、Database Publishing Wizard で開発環境のユ
    ーザー登録やロールの設定済みの ASPNETDB.mdf からスクリプトを
    生成すれば、上記 (5) の手順は不要のはずです。

    DB Publishing Wizard
    http://surferonwww.info/BlogEngine/post/2010/09/23/DB-Publishing-Wizard.aspx


    あと、今回の問題とは関係ないことですが、ExpressWeb のサーバー
    は Web ファーム構成という話を聞きました。もしそうだとすると
    MachineKey を手動で設定する必要がありますのでお忘れなく。

    How To: ASP.NET 2.0 で MachineKey を構成する方法
    http://msdn.microsoft.com/ja-jp/library/ms998288.aspx

    • 回答としてマーク noriyasu 2012年7月5日 14:47
    2012年7月3日 12:43
  • あ、Blogを引っ越したためにリンク切れになってますね。
    情報として古い部分がありますが、参考になるかもしれないので現在のページを。

    http://blogonos.wordpress.com/2006/02/15/%e3%83%ac%e3%83%b3%e3%82%bf%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90%e3%81%a7%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%b3%e3%83%b3%e3%83%88%e3%83%ad%e3%83%bc%e3%83%ab%e3%82%92%e5%88%a9%e7%94%a8%e3%81%99/

    #うむ、、、URLどうにかしたほうがいいかな。。。


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)

    2012年7月3日 13:35
  • アドバイス大変助けになります。ありがとうございます。

    ExpressWebから返信が着まして、大まかな内容的には

    1.ExpressWeb上にSQL Server データベースを作成する。

    2. aspnet_regsql.exe を使用して、SQLクエリを生成する。

    3. SQL管理ツール(myLittleAdmin)を開き、クエリを実行する。

    でした。

    ここで、1.は作成しました。とりあえず、abcDB(仮名)とします。

    2なのですが、コマンドプロンプトに

    c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regsql -d abcDB
    -sqlexportonly c:\abcDB.sql -A all

    と入力し実行とあり、トライしたところ、「パス 'c:\abcDB.sql'へのアクセスが拒否されました 。」とエラーになってしまいました。

    また、ExpressWebに問合せようと思います。

    次にSuferOmWww様の方法もトライしてみました。

    c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regsql -sqlexportonly abcDB -A all -d abcDB

    とコマンドを実行したところ、「完了しました。」となりました。ここまでは良いのですが、(3)myLittleAdmin を使用して、スクリプトを走らせ...とのことですが、この完了したスクリプトは、どこに生成されるのでしょうか?

    とりあえず、ExpressWebの返信を待ってみようと思います。

    初心者には、かなり難解なですが、粘り強く進めようと思います。

    追記:上記の「パス 'c:\abcDB.sql'へのアクセスが拒否されました 。」は、先ほどコマンドプロンプトを「管理者として実行」で起動して実行したら、正常に「完了しました。」が表示されました。




    • 編集済み noriyasu 2012年7月3日 22:42
    2012年7月3日 21:53
  • 小野様へ

    情報、大変助かります。ありがとうございます。

    初心者には、難解な作業となりますが、少しずつ進めようと思います。

    また、よろしくお願いします。

    2012年7月3日 21:56
  • お世話になります。

    ExpressWebでのASPNETDB.mdfの利用の件ですが、まだ、解決に至ってません・・・。

    ExpressWebからの回答手順をやってみました。

    1.ExpressWeb上にSQL Server データベースを作成する。

    2. aspnet_regsql.exe を使用して、SQLクエリを生成する。

    3. SQL管理ツール(myLittleAdmin)を開き、クエリを実行する。

    3まで実行すると、確かに1で作成したデータベースabcDB(仮名)内に複数のテーブル等が生成されてました。

    ここで、日記Webアプリの管理機能が有効になったか、トライしたのですが、ダメでした。

    そこで、SurferOnWww様のアドバイスの接続文字列設定をすることにしました。ExpressWebサイトに下記設定方法があったので設定してみました。

    <add name="SiteSqlServer" connectionString="Data Source=DBサーバ名;Initial Catalog=DB名;User ID=DBユーザ名;Password=パスワード"
    providerName="System.Data.SqlClient" />

    add nameの部分は、VS2010で自動的にweb.configに付けられていた、add name="ApplicationServices"に修整しました。

    この設定で、日記WebアプリをExpressWebで実行しても、管理機能は有効にならなかったです。

    再び、ExpressWebに問合せてみますが、何方か良いアドバイスがあれば、よろしくお願い致します。

    追記:今、開発用PCのIISにWebの発行をして、実行してみたのですが、ExpressWebと同様に管理機能は有効になってなかったです。VS2010での実行のみ管理機能は有効になるようです。開発用PCのIISの時は接続文字列の修整はしてないです。何故だかよく分からない・・・。

    • 編集済み noriyasu 2012年7月4日 22:14
    2012年7月4日 21:39
  • 管理機能が有効にならない、とのことですがなにかエラー等はでませんか?

    > 3まで実行すると、確かに1で作成したデータベースabcDB(仮名)内に複数のテーブル等が生成されてました。

    私のサイトの記事で作成されるテーブルとか書いてたと思うので、だいたいそれとあってるか確認してみてください。
    まぁ、バージョンが違うので多少増減あるかもしれませんが。

    開発用PCのIISにWebの発行をしたものについてはmdfファイルとかはコピーされてますかね。
    このあたり普段Webの発行を使わないので動きがよくわかってないです。
    Webの発行でなく、プロジェクトのファイルそのままコピーして適切な設定すれば普通は動くんですが。

    あと、ちょっと古いですが、メンバーシップを使うための基礎的な情報について下記の資料にまとめてますので確認してみてください。

    http://www.slideshare.net/onos/20061125-12872928

    追記:最近のもあったんだった。。。
    http://www.slideshare.net/onos/20111203-12873309


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)


    2012年7月5日 1:28
  • > ここで、日記Webアプリの管理機能が有効になったか、トライした
    > のですが、ダメでした。

    「ダメ」というのは、具体的のどのようになったのでしょう? 最初
    の質問にあったように「誰でもアクセス出来てしまいました」という
    ことでしょうか? 普通、そのようなことはないはずですが・・・


    > この設定で、日記WebアプリをExpressWebで実行しても、管理機能
    > は有効にならなかったです。

    先のレスで書いた (5) の手順はやりましたか? Web ファーム対応
    のための MachineKey の設定はしましたか? レスをちゃんと読ん
    でもらっているでしょうか?

    > (5) ここまでで ASPNETDB.mdf 相当の DB が生成され、Web アプリ
    >   から接続できるようになっているはずです。ただし、DB の中身
    >   は空なので、自分でユーザー登録とロールの設定が必要です。
    >
    > 管理用のアプリを作るなりしないと (5) はできないので少々面倒か
    > も知れません。

    myLittleAdmin を使用してテーブルに直接書き込んでも動かないので、
    止めた方がいいです。

    以下のようなメソッドを使って、ユーザー登録とロールの設定を行う
    管理ページを作ることをお勧めします。

    MembershipProvider.CreateUser メソッド
    http://msdn.microsoft.com/ja-jp/library/system.web.security.membershipprovider.createuser.aspx

    Roles.AddUserToRole メソッド
    http://msdn.microsoft.com/ja-jp/library/system.web.security.roles.addusertorole.aspx


    > VS2010での実行のみ管理機能は有効になるようです。開発用PCの
    > IISの時は接続文字列の修整はしてないです。

    開発サーバーでは問題ないものが、IIS 上で動かすと問題が出る
    というのは、たいていワーカープロセスのアクセス権の問題です。

    ASP.NET 開発サーバーと IIS
    http://surferonwww.info/BlogEngine/post/2011/11/18/ASPNET-development-server-and-IIS.aspx

    それと、Web アプリケーションプロジェクトを開発マシンの IIS
    上で Visual Studio から起動して動かす場合、かつ App_Data
    フォルダの ASPNETDB.mdf にユーザーインスタンスを使って接続
    する場合、ワーカープロセスに App_Data フォルダに対する読み
    取り/書き込み権限を与えないとダメだと思います。

    2012年7月5日 13:29
  • 小野様

    アドバイスありがとうございます。

    まず、小野様のサイトで記載されていたテーブルと、同じテーブルが生成されていました。

    開発PCのIISで同様なことになったので、プロジェクトのファイル全部コピーで試したところ、正常にユーザー登録ページが表示されました。書籍ではWeb発行でやっていたし、IISフォルダに設定する必要なファイルが分からないので、Web発行でやっていた訳です。

    そこで、もしかしたら、ExpressWebにも、ファイル全部コピーすると良いかもと思い、接続文字列のみ修整して、試したところ、正常にユーザー登録ページが表示されました。

    とりあえず、正常にユーザー登録ページが表示されましたので、ありがとうございました。

    分からないことばかりで、難しいです。

    2012年7月5日 14:28
  • SurferOnWww様

    毎回、ありがとうございます。

    開発PCのIISでも同様の現象になったので、小野様のアドバイスの、プロジェクトのファイルを、そのままコピーで試したところ正常に動作しました。(これまでWeb発行を使っていた)

    同様にExpressWebにも、接続文字列を修整して、そのままコピーしたところ、正常にユーザー登録ページが表示されました。

    (1)~(5)の手順と、そのままコピーで、なんとか成功したようです。しかし、SurferOnWww様がおっしゃるように、DBの編集が問題ではあります。他の方法も参考にしたと思います。

    まだまだ、分からないことばかりです。今後とも、よろしくお願いします。

    2012年7月5日 14:47