75

プロジェクトでコード ファーストを使用し、ホストにデプロイしましたが、エラーが発生しました

データベース 'master' で CREATE DATABASE 権限が拒否されました。

これは私の接続文字列です:

<add name="DefaultConnection" 
     connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-test-2012615153521;Integrated Security=False" 
     providerName="System.Data.SqlClient;User ID=test;Password=test"/>
4

24 に答える 24

21

データベースを作成する権限があることを確認してください(user2012810が述べたように)。

また

あなたのコードは最初に別の(またはデフォルトの)接続文字列を使用しているようです。コンテキスト クラスに接続名を設定しましたか?

public class YourContext : DbContext
    {
        public YourContext() : base("name=DefaultConnection")
        {

        }

        public DbSet<aaaa> Aaaas { get; set; }
    }
于 2013-10-05T13:43:32.897 に答える
20

Code First (データベース アプローチなし) を使用してデータベースを作成しようとすると、同じ問題が発生しました。問題は、データベースを作成するための十分なアクセス許可が EF にないことです。

そこで、Code First を使用して (既存のデータベース アプローチを使用して) 作業を進めました。

手順 :

  1. Sql サーバー管理スタジオでデータベースを作成します (できればテーブルなしで)。
  2. Visual Studio に戻り、新しく作成したデータベースの接続をサーバー エクスプローラーに追加します。
  3. ここで、データベースの接続文字列を使用して、「既定の接続」のような名前で app.config に追加します。
  4. Context クラスでコンストラクターを作成し、それを基本クラスから拡張して、接続文字列の名前をパラメーターとして渡します。と同じように、

    public class DummyContext : DbContext
    {
      public DummyContext() : base("name=DefaultConnection")
      {
      }  
    }
    

5.コードを実行して、提供されたデータベースにテーブルが追加されていることを確認します。

于 2014-12-06T07:46:35.613 に答える
12

管理者としてVisual Studioを実行すると、うまくいきました

于 2015-10-14T19:51:14.940 に答える
3

このエラーと思われるものが発生しました。私は Windows で実行していましたが、管理者の Windows ユーザーがデータベースに対する管理者権限を持っていないことがわかりました。

  1. [サービス] から SQL Server をシャットダウンします</li>

サービスを無効にする

  1. コマンド ウィンドウを (管理者として) 開き、次のコマンドを使用してローカル管理者としてシングル ユーザー モードを実行します (MSSQL のバージョンは異なる場合があります)。
"C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\Binn\sqlservr.exe" -m -s SQLEXPRESS
  1. 別のコマンド ウィンドウを開きます (管理者として)
  2. その端末で次のコマンドを使用して sqlcmd を開きます。
sqlcmd -S .\SQLEXPRESS
  1. ここで、sysadmin ロールをユーザーに追加します。
sp_addsrvrolemember 'domain\user', 'sysadmin'
GO
  1. [サービス] から SQL Server を再度有効にする</li>

クレジット: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/76fc84f9-437c-4e71-ba3d-3c9ae794a7c4/

于 2019-02-11T02:56:36.503 に答える
1

上記の合併であるため、私がしなければならなかったことを追加します。Code First を使用しています。'create-database' を使用しようとしましたが、タイトルにエラーが表示されました。閉じてから再度開いた (今回は管理者として) - コマンドは認識されませんでしたが、'update-database' が非常に使用されていました。同じエラー。

これを解決するために私が取った手順は次のとおりです。

1) SQL Server Management Studio を開き、データベース "Videos" を作成しました

2) VS2013 でサーバー エクスプローラーを開き ([表示] の下)、データベースに接続しました。

3) 接続を右クリック -> プロパティを選択し、接続文字列を取得しました。

4) web.config に接続文字列を追加しました

   <connectionStrings>
<add name="DefaultConnection"
  connectionString="Data Source=MyMachine;Initial Catalog=Videos;Integrated Security=True" providerName="System.Data.SqlClient"
  />
  </connectionStrings>

5) コンテキストを設定する場所で、DefaultConnection を参照する必要があります。

using System.Data.Entity;

namespace Videos.Models
{
public class VideoDb : DbContext
{
    public VideoDb()
        : base("name=DefaultConnection")
    {

    }

    public DbSet<Video> Videos { get; set; }
}
}

6) Package Manager コンソールで、「update-database」を実行してテーブルを作成します。

Configuration.cs で、作成時に Seed() を使用して値を挿入できることを思い出してください。

        protected override void Seed(Videos.Models.VideoDb context)
        {
        context.Videos.AddOrUpdate(v => v.Title,
            new Video() { Title = "MyTitle1", Length = 150 },
            new Video() { Title = "MyTitle2", Length = 270 }
            );

        context.SaveChanges();
        }
于 2015-04-15T12:33:53.977 に答える
1

接続文字列が Web.Config にあることを確認します。そのノードを削除して Web.Debug.config に入れましたが、これが受け取ったエラーです。それを Web.config に戻し、うまく機能しました。

于 2015-08-23T01:00:17.743 に答える
0

.\SQLExpressData Sourceとして使用している場合は、接続文字列に " User Instance=True " 属性を追加して、タイトルに記載されているエラーを修正できます。

例えば、


Data Source=.\\SQLExpress;Integrated Security=true;  
User Instance=true;  
AttachDBFilename=|DataDirectory|\app_data\Northwind.mdf;  
Initial Catalog=Northwind;

ユーザー インスタンスを使用すると、ローカル コンピューターの管理者ではないユーザーが、SQL Server Express データベースにアタッチして接続できます。各インスタンスは、個々のユーザーのセキュリティ コンテキストの下で、ユーザーごとに 1 つのインスタンスで実行されます。

参照: SQL Server Express ユーザー インスタンスの MSDN リンク

于 2021-06-17T16:48:06.863 に答える
-11

拒否されたアクセス許可はセキュリティであるため、「ユーザー」アクセス許可を追加する必要があります..

  1. データベース(.mdfファイル)を右クリックしてからプロパティをクリックします
  2. セキュリティタブに移動
  3. [続行] ボタンをクリックします
  4. 追加ボタンをクリック
  5. 進むボタンをクリック
  6. 別のウィンドウが表示されるので、右側の [今すぐ検索] ボタンをクリックします。
  7. 以下のフィールドで、一番下に移動し、[ユーザー] をクリックします。[OK] をクリックします。
  8. 作成した権限「ユーザー」をクリックし、フルコントロールのチェックボックスにチェックを入れます。

ほらね。これで、データベースへのアクセス許可が付与されました。

注: 上記の質問の接続文字列は、SQL サーバー認証を使用しています。したがって、上記の手順を実行する前に、最初に Windows 認証を使用してログインする必要があります。次に、SQL サーバー認証を使用しているユーザーに許可を与える必要があります。「dbcreator」のようなパーミッション。

SQLサーバー認証でログインし、ログインしたユーザーに許可を与えようとすると、許可が拒否されたというエラーが表示されます。

于 2013-01-26T01:24:21.730 に答える