web-dev-qa-db-ja.com

データベース 'master'でCREATE DATABASE権限が拒否されました(EFコード優先)

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

データベース '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"/>
53
Mohammad

同じ問題がありました。これは私のために働いたもの:

  1. SQL Server Management Studioに移動し、Administratorとして実行します。
  2. Security-> ThenLoginsを選択します
  3. usernames、またはログインでデータベースにアクセスするユーザーをダブルクリックして選択します。
  4. データベースを作成するための資格情報を提供するサーバーロールを提供します。私の場合、publicはすでにチェックされているので、dbcreatorおよびsysadminをチェックしました。
  5. Package Managerコンソールでupdate-databaseを再度実行します。これでデータベースが正常に作成されます。

これは大きな画像を取得できるようにするための画像です。もちろん、資格情報はぼやけています: enter image description here

39
Willy David Jr

Dbを作成する権限を持っていることを確認してください(user2012810に言及)。

または

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

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

        }

        public DbSet<aaaa> Aaaas { get; set; }
    }
20
Shahab J

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.そして、コードを実行して、提供されたデータベースに追加されるテーブルを確認します。

17
Sarath Rachuri

管理者としてVisual Studioを実行します。

9
Marlon Vidal

このエラーは、ソリューションに複数のプロジェクトがあり、間違ったプロジェクトがスタートアッププロジェクトとして設定されている場合にも発生する可能性があります。

Update-Databaseで使用される接続文字列は、パッケージマネージャーコンソールで選択された「既定のプロジェクト」ではなく、スタートアッププロジェクトから取得されるため、これは重要です。

masoud へのクレジット)

7
Roman Starkov

私のやり方でこの問題を解決しました。この方法で接続文字列を試してください:

<add name="MFCConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MFC.mdf;Initial Catalog=MFC;Integrated Security=false;User ID=sa;Password=123"
  providerName="System.Data.SqlClient" />

マスターからMFCにデフォルトデータベースを設定することを忘れないでください(あなたの場合、aspnet-test-2012615153521)。

5
cheny

接続文字列を再確認してください。存在しないデータベースを指す場合、EFはmasterデータベースにテーブルを作成しようとしますが、このエラーが発生する可能性があります。
私の場合、データベース名にタイプミスがありました。

3
Sam Sch

エラーが示唆するように、SQLログインにはデータベースを作成する権限がありません。ログインに必要な役割がある場合、許可が付与されます。データベースを作成、変更、および削除する権限を持つロールは dbCreator です。したがって、問題を解決するには、ログインに追加する必要があります。 SQL Management Studioでユーザーを右クリックして、[プロパティ]> [サーバーロール]に移動します。私は同じエラーに遭遇し、まさにそれをすることで解決しました。

3
cham

IISでサイトを実行している場合、アプリケーションプールのIDを管理者に設定する必要がある場合があります。

1
stuartdotnet

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

  1. 「サービス」からSQL Serverをシャットダウンします

Disable Services

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

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

1
Chris

ステップ1:ローカルアカウントから切断します。

ステップ2:管理ユーザーで再びサーバーに接続します

ステップ3:オブジェクトエクスプローラー->セキュリティ->ログイン->サーバー名を右クリック->プロパティ->サーバーロール-> sysadmin-> OK

ステップ4:ローカルログインを切断して接続し、データベースを作成します。

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

1
scottndecker

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

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

1)SQL Server Management Studioを開き、データベース「ビデオ」を作成しました

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();
        }
1
VictorySaber

Visual Studioを管理者として実行し、SQL SERVER認証ログイン(DBを作成する権限を持つ)とパスワードを接続文字列に入れます。

1

私にとっては、SQL Server Management Studioを含む現在のセッションをすべて閉じてから、再度開いて下のスクリプトを実行するとうまくいきます

IF EXISTS (SELECT NAME FROM master.sys.sysdatabases WHERE NAME = 'MyDb')
DROP DATABASE mydb RESTORE DATABASE SMCOMDB FROM DISK = 'D:/mydb.bak' 
0
sam

私のために働いた解決策は、edmxファイルを作成するときにデータベース最初のウィザードを実行したときに作成されたEntity Framework接続文字列を使用することでした。接続文字列には、「metadata = res:///PSEDM.csdl|res:///PSEDM.ssdl |」などのメタデータファイル参照が必要です。 res://*/PSEDM.msl」。また、接続文字列は、呼び出し元アプリケーションの構成に含まれている必要があります。

その方向に私を指すために、この投稿へのHT: DbContextを使用した最初のモデル、新しいデータベースの初期化に失敗します

0
Corey

この問題の解決策は、ケーキを食べるのと同じくらい簡単です。この問題は一般に、ユーザー資格情報が変更され、SQLサーバーがユーザーを識別できない場合に発生します。既存のSQLサーバーインスタンスをアンインストールする必要はありません。新しいインスタンス名を持つインスタンス。最後のインスタンス名が 'Sqlexpress'だった場合、インストール中にインスタンスに 'Sqlexpress1'と名前を付けます。また、インストール中に混合モード(つまり、SQL Server認証とWindows認証)を選択し、将来そのような問題が発生した場合に便利なシステム管理パスワードを提供することを忘れないでください。この解決策は間違いなくこの問題を解決します。ありがとう。

0
user7556293

私は自分の解決策を証明するものではなく、単なる仮定を持っています。

私の場合、接続文字列のドメイン名が原因です。 DNSサーバーが利用できない場合、データベースに接続できないため、Entity Frameworkがこのデータベースを作成しようとするという前提があります。しかし、許可は拒否されます。これは正しいです。

0
Tomas Kubes

私は同じ問題を抱えていたので、インターネットで入手可能なものをすべて試しました。しかし、SSMS RUN AS ADMINISTRATORは私のために機能します。それでも問題が解決しない場合は、SQL SERVERをダウンロードしておく必要があります。

0
Nikhil Tayal