• ベストアンサー

ASP.NETからのデータベースの作成

こんにちは。 SQL SERVER 2005 ExpressとIIS5.0とASP.NET2.0+C#で使っています。 一台のサーバーマシンに、SQL SERVER 2005 ExpressとIIS5.0をインストールした状態なのですが、Webページ上のC#のプログラムよりデータベースを作成しようとすると、 CREATE DATABASE 権限がデータベース 'master' で拒否されました。 と、メッセージが出ます。 要するに権限がないというのはわかるのですが、このようにWebからログインしてきたユーザーに権限を付加することはできるのでしょうか? あるいは、接続文字列かなんかで権限のあるユーザーでログインする、といったことが可能なものでしょうか? 現在は以下のようにして接続、作成を行おうとしています。 SqlConnection conn = new SqlConnection(); conn.ConnectionString = "Server=.\\SQLEXPRESS;Integrated security=SSPI"; String strDatabase = "CREATE DATABASE newdatabase"; SqlCommand cmdDatabase = new SqlCommand(strDatabase, conn); conn.Open(); cmdDatabase.ExecuteNonQuery(); conn.Close(); エラーの内容から、SQL SERVERそのものへのアクセスは成功しているように思えます。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hofuhofu
  • ベストアンサー率70% (336/476)
回答No.4

Enterprise ManagerはSQL Server2000等に付属していた管理ツールですが、SQL Server 2005では廃止され、Management Studioというものになっています。これはSQL Server Express with Advanced Servicesにも含まれるので、無償で利用可能です。まずこれをインストールしておいたほうが後々管理しやすくなるはずです。 http://www.microsoft.com/downloads/details.aspx?FamilyId=5B5528B9-13E1-4DB9-A3FC-82116D598C3D&displaylang=ja Management Studioで該当のサーバに接続し、セキュリティ->ログインにユーザーASPNETを追加、その際サーバーロールを設定する項目があるので、そこでdbcreatorにチェックを入れておけばASP.NETでもCREATE DATABASEが使用できるようになると思います。

参考URL:
http://www.microsoft.com/downloads/details.aspx?FamilyId=5B5528B9-13E1-4DB9-A3FC-82116D598C3D&displaylang=ja
titokani
質問者

お礼

こんなツールがあったのですね。 SQL Server Express with Advanced Servicesをインストールして、Management Studioから設定することができました。 大変ありがとうございました。

その他の回答 (3)

  • ape5
  • ベストアンサー率57% (85/148)
回答No.3

失礼しました。データベースを動的に作成したいのでしたね(汗) 以下のサイトが参考になるかもしれません。英語のサイトですが。 ただ、SQLServer2005で使えるってことのようで、ExpressEditionでも使えるのかは不明です。 http://www.codeproject.com/KB/aspnet/Create_Database.aspx

titokani
質問者

お礼

SQLDMOコンポーネントというものですね。 いろいろとツールを作る際には非常に便利そうです。 今回は#4さんの方法で対応できたのですが、今後必要となることもあるかもしれません。 ありがとうございました。

  • ape5
  • ベストアンサー率57% (85/148)
回答No.2

以下のリンク先を参考になさってはどうでしょうか。 現在は既存のデータベースにテーブルを作成しようとして、権限がないですよと蹴られているのだとおもうので、リンク先の方法で新しいデータベースを作成してそれにテーブルを作成するようにすれば権限が付与されるのかもしれません。 リンク先はASP.NETから使用するときの記事なのでうまくいくかもしれません。 http://www.atmarkit.co.jp/fdotnet/vs2005db/vs2005db_02/vs2005db_02_01.html

titokani
質問者

お礼

ありがとうございます。でも違うんです。 ASP.NETから新規にデータベースを作成したいのです。

  • ape5
  • ベストアンサー率57% (85/148)
回答No.1

ちょっと自分の知識も曖昧なのですが、IIS5.0のASP.NETでは、リソースにアクセスする時にはASPNETというアカウントを使用して動くはずだと思いました。(IIS6.0ならNT AUTHORITY/NETWORK SERVICEだったかな) ですので、SQLServerの認証がwindows認証で設定してあるようですので、ASPNETのアカウントでMasterのデータベースにアクセスできるように権限をつけてあげればよいはずです。 CREATE文なので"Create table"の権限を与えれば動きます。もちろんそのほかのこともしたいなら、それに対する権限を与えてください。 http://www.microsoft.com/japan/msdn/enterprise/pag/securityguidance/paght000015.aspx

titokani
質問者

補足

お返事遅くなりまして申し訳ありません。情報ありがとうございます。 リンク先も見てみたのですが、当方の環境がExpressだからでしょうか、SQL Server Enterprise Managerなるものが存在しませんでした。他になにか設定する方法があればよいのですが・・。 とりあえず、コントロールパネルの「ユーザーとパスワード」より、ユーザーASPNETのグループをSQLServer2005MSSQLUser$XXXXX$SQLEXPRESSに変更して使用しておりますが、これでよいのでしょうか?

関連するQ&A

  • ASP C#

    単純にデータベースから取得した物をフォームのTEXT_BOXに表示させたいのですがやり方がわかりません。 グリッドビューに結果をそのままバインドするのはわかるのですが。。。 select 品名 from 商品テーブル where ID = 3 など、結果が必ず1件のものです SqlConnection cn = new SqlConnection(@"Server=*****;Database=*****;User ID=***; Password=***;"); SqlCommand cmd = new SqlCommand("select title from mst_table where id = 1", cn); cn.Open(); このあと text_box.text = 結果; としたいんです。。。

  • ASP.NETでSQL-SERVERへの接続方法

    最近、ASP.NETの勉強をはじめました。テキストを見ながらサンプルプログラムを作成しているのですが、SQL-SERVERへのDB接続方法がうまくいきません。 Dim conn As String = "data source=????;user id=sa;password=;initial catalog=SampleDb" Try   Dim objConn As New SqlClient.SqlConnection   objConn.ConnectionString() = conn   Dim comm As New SqlClient.SqlCommand(sql, objConn)   objConn.Open() ソース一番上の????の部分に何と記述すればいいかわかりません。テキストには localhost と記述されています。コンパネの「ODBCデータソース」のDSNやサーバ名を記述しても無理でした。 ASP開発で使用していたDB接続 Conn = "PROVIDER=SQLOLEDB;SERVER=サーバ名;DATABASE=YUSODB;UID=sa;PWD=;" を試したりしたのですが、無理でした。 どなたかご教授お願いします。

  • vb.netでmdfデータベースにアクセスするとき

    こんにちわ。 いまvb.net2005expressでsqlserver2005expressの mdfデータベースにアクセスするコーディングを書いています。 ところが最初のコネクションの確立のところで下記のような コーディングをしているのですが, 後続の"sqlDataAdapter.Fill(sqlDataSet, "MST_User")"の行で, データベースにログインできない,というエラーが出てしまいます。 'DB接続文字列の設定 sqlconn.ConnectionString = "Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=Database1;server=(local)" sqlconn.ConnectionString = "Data Source=(local);Database=Database1;" _ & "Integrated Security=SSPI;" ※なおmdfデータベースのファイル名は"Database1.mdf"です。 なおデータベースエクスプローラで[接続の変更]を開いて接続しようと すると"正しく接続されました"となります。 プログラムでログインできない理由は何でしょうか? 教えてください。よろしくお願いします。

  • ユーザー名にアンダーバーを含む場合のデータベース作成について

    ユーザー名にアンダーバーを含む場合のデータベース作成について mysql > create database demo_demo; mysql > grant all on demo_demo.* to demo_demo@localhost 上記のSQL を発行した場合、「demo_demo」というデータベースと、ローカルから「demo_demo」データベースにALL の権限の範囲内でアクセスできる「demo_demo」というユーザーが作成されると思います。ここで2点教えてください。 質問1: ALL権限には「create database」を許可するCREATE権限が含まれますが、上記「demo_demo.* 」のように、grant 時に特定のデータベースに対してのみALL権限を与えた場合の「create database」を許可するCREATE権限とはどういう意味を持つのでしょうか? 質問2: mysql > create database `demotdemo`; など、ユーザー名のアンダーバー部分に任意文字を当てたデータベースが無限に作成できてしまいます。アンダーバーがSQL的に「任意の一文字」に相当するとは理解していますが、「demotdemo」などのデータベースが作成できてしまうのはmysql の仕様でしょうか?また、ユーザーが「create database」可能かでないかの判定はどの権限で制御されているのでしょうか? 参考資料でもよいので教えてください。お願いします。

    • ベストアンサー
    • MySQL
  • 現在、ASP.NET(言語:VB.NET)にて、

    現在、ASP.NET(言語:VB.NET)にて、 データ参照、更新系のWebアプリケーションを自学しているものですが、 DAC(Data Access Componet)を利用してSQL Serverのデータを取得、更新する際、 コネクションの閉じ方が分からず困っています。 DACを使用しない場合は、 下記のようにSQLConnectionをUsing句で明示的に括り、 Closeさせることができますが、 DACを使用した場合はTableAdapterからSQLConnectionを取得できず、 同様の実装方法を採れません。 ------------------ Dim mySelectQuery As String = "SELECT * FROM Categories ORDER BY CategoryID" Dim myConnectString As String = "Persist Security Info=False;Integrated Security=SSPI;database=northwind;server=mySQLServer" Dim myCommand As New SqlCommand(mySelectQuery) Using conn AS SqlConnection = New SqlConnection(myConnectString) myCommand.Connection =conn myCommand.CommandTimeout = 15 myCommand.CommandType = CommandType.Text myCommand.ExecuteNonQuery() End Using ------------------ 一方、DACを使用した場合は下記のように実装しております。 ------------------ Dim ta As New SystemError_OriginalTableAdapters.OriginalTableAdapter Dim dt As New SystemError_OriginalDataTable ta.FillBy(dt, id) ' テーブルアダプターのFillメソッドを呼び出すのみで、Closeしているかどうかがわからない。 ------------------ DACでは、Fillメソッド実行後に必ずSQLConnectionがCloseされることが 保証されているなら問題は無いのですが、 そうでない場合、テーブルアダプターからSQLConnectionを取得して、 明示的にCloseさせてやりたいと思っています。 DACを使用した場合のSQLConnectionの取得方法、 もしくはSQLConnectionのCloseの方法についてご教授願えないでしょうか? 以上、宜しくお願いします。

  • Visual Studio 2005 Sql Server 2005 C#

    先輩方 こんばんは カネゴンです。 下記内容で困っています。 SqlConnection がオープンできません。 「SQL Server の既定の設定がリモート接続を許可しないようになっていることがエラーの原因 sql server」のエラーと 「**」はログインできませんでしたの表示がされ、かれこれ3日悩んでおります。 宜しくお願いします。 SqlConnection cn = new SqlConnection(@" Server = local ; Trusted_Connection = Yes ; Database = user_master ; uid = *** ; pwd = *** ; "); SqlCommand cmd = new SqlCommand("login_check", cn); cmd.CommandType = CommandType.StoredProcedure; SqlParameter p1 = new SqlParameter("@p1",             System.Data.SqlDbType.VarChar, 16); p1.Value = TextBox1.Text; SqlParameter p2 = new SqlParameter("@p2",             System.Data.SqlDbType.VarChar, 16); p2.Value = TextBox2.Text; cn.Open();

  • ASP.Net Web.Config 接続文字列が

    お世話になります。 Web.Config から 接続文字列を取得しようと下記のようなコードをサイトから学んだのですが、 Dim conStr As String = ConfigurationManager.ConnectionStrings("ConnectionStringSQL").ConnectionString Dim conn As SqlConnection = New SqlConnection(conStr) これを実行すると、エラーになってしまいます。 "Provider=SQLOLEDB;Data Source=SERVER01;Integrated Security=SSPI;Initial Catalog=TESTSQL" 上記が接続文字列なのですが、Provider=SQLOLEDB この部分を取り除き、 "Data Source=SERVER01;Integrated Security=SSPI;Initial Catalog=TESTSQL" このように直接、接続文字列を上記のようにすると、問題なく動くのですが、何かおかしいと思うのですが、わたくしの方にミスや足りない個所があれば、是非、ご指摘いただければと存じます。 Dim conStr As String = ConfigurationManager.ConnectionStrings("ConnectionStringSQL").ConnectionString Dim conn As SqlConnection = New SqlConnection(conStr) 上記のように記述して接続文字列を取得設定できればスマートだと思うのですが・・・・ よろしくお願いいたします。

  • データベースから情報の取得・更新・削除 SQL2005 C# 2

    おはようございます。カネゴです。 表記の件で再度質問させていただきいます。 まずは情報取得。 これは、検索・抽出といったほうがいいのでしょうか。ID PASSを テキストボックスに入力し検索ボタンを押下すると、データベースから 検索結果に、マッチしたレコードがデータグリッドに表示されると いうものです。 sqlconnection sqlcomand. などを使用し sqldataadaptedのfill メソッドで表示させればいいのでしょが、なかなかうまくいきません… 更新削除も同様に、ado.netで行いたいのですが、なかなかうまくいきません。 「検索」btn押下後のイベントです。 SqlConnection cn = new SqlConnection(@" server = ***\SQL2005 ; " + " database = user_master ; " + " uid = sa ; " + " pwd = *** ; "); cn.Open(); SqlCommand cmd = new SqlCommand("SELECT * FROM user_master where UserID=textBox1.Text and Password=textBox2.Tet ", cn); SqlDataAdapter da = new SqlDataAdapter (); da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds, "user_master"); cn.Close(); たぶん、select文のなかが違うと思います。 マルチパート識別子 "textBox1.Text" をバインドできませんでした。 マルチパート識別子 "textBox2.Text" をバインドできませんでした。 とエラーがでます。 素人なので、つぎはぎして作ったので、文法的なものがめちゃくちゃかもしれませんが 以上宜しくお願いします。

  • VB.NetでSQLServer2005に接続できません。教えてください。

    はじめまして。初めて投稿します。 かなり困っているので、誰か助けてください。 内容はVB.Net2003を使用して、SQLServer2005に接続するときに 「SSPI コンテキストを生成できません」のエラーが発生してしまいます。 SQLServer2005をインストールしているのがサーバーではなく クライアント(プログラムを実行している端末)なので、 それが原因だと思うのですが、どうしてもその環境でしなくてはいけないので 何かご存知の方がおられるのなら、ご教示お願いします。 ソースは以下のとおりです。 ↓ Dim Scn As SqlClient.SqlConnection = New SqlClient.SqlConnection '接続文字列セット Scn.ConnectionString = _ "Server=""(local)"";Integrated Security=SSPI;database=" & データベース名 'dbオープン Scn.Open() ←このタイミングでエラーが発生

  • データベースのログインユーザー名とパスワードが分からない状態でSQLイ

    データベースのログインユーザー名とパスワードが分からない状態でSQLインジェクション攻撃は可能でしょうか サーバーの構成は以下の通りです ウィンドウズ2008サーバーR2のIIS7.0+SQLサーバ2008EXPRESS 以前win2000サーバーでウェブサイトを運営中コンテンツをごっそり抜かれてしまったことがあるので, 攻撃者はソース上からテーブル構造の知っていると考えられます。 現在テーブルに対してinsert処理もしくはUPDATE処理しているファイルは中国方面あるいはアジア圏のIPアドレスからは アクセスできないようにしており、403エラーが出るように設定していますので、ファイルに対してポストできないように なっているはずです。 この状態でテーブルへのスクリプトの書き込みは可能なのでしょうか 現在この状態でもスクリプトが書き込まれてしまいます。 仕方ないので、データベースのすべてのログインユーザーに対して書き込み・上書き権限を除外しました。 こうしたところ書き込みはなくなりました こうしてしまうと、商品情報などを登録するたびに、ユーザーに対して書き込み・上書き権限を与える必要があり、非常に生産性が悪い状態になってしまっています。