プロジェクトでコードファーストを使用してホストにデプロイしますが、エラーが発生します
データベース '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"/>
同じ問題がありました。これは私のために働いたもの:
Dbを作成する権限を持っていることを確認してください(user2012810に言及)。
または
コードは最初に別の(またはデフォルトの)接続文字列を使用しているようです。コンテキストクラスに接続名を設定しましたか?
public class YourContext : DbContext
{
public YourContext() : base("name=DefaultConnection")
{
}
public DbSet<aaaa> Aaaas { get; set; }
}
Code First(データベースアプローチなし)を使用してデータベースを作成しようとすると、同じ問題が発生しました。問題は、EFがデータベースを作成するための十分な権限を持っていないことです。
それで、Code Firstを使用して(既存のデータベースアプローチを使用して)作業を進めました。
手順:
Contextクラスで、そのコンストラクターを作成し、基本クラスから拡張して、接続文字列の名前をパラメーターとして渡します。と同じように、
public class DummyContext : DbContext
{
public DummyContext() : base("name=DefaultConnection")
{
}
}
5.そして、コードを実行して、提供されたデータベースに追加されるテーブルを確認します。
管理者としてVisual Studioを実行します。
このエラーは、ソリューションに複数のプロジェクトがあり、間違ったプロジェクトがスタートアッププロジェクトとして設定されている場合にも発生する可能性があります。
Update-Database
で使用される接続文字列は、パッケージマネージャーコンソールで選択された「既定のプロジェクト」ではなく、スタートアッププロジェクトから取得されるため、これは重要です。
( masoud へのクレジット)
私のやり方でこの問題を解決しました。この方法で接続文字列を試してください:
<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)。
接続文字列を再確認してください。存在しないデータベースを指す場合、EFはmaster
データベースにテーブルを作成しようとしますが、このエラーが発生する可能性があります。
私の場合、データベース名にタイプミスがありました。
エラーが示唆するように、SQLログインにはデータベースを作成する権限がありません。ログインに必要な役割がある場合、許可が付与されます。データベースを作成、変更、および削除する権限を持つロールは dbCreator です。したがって、問題を解決するには、ログインに追加する必要があります。 SQL Management Studioでユーザーを右クリックして、[プロパティ]> [サーバーロール]に移動します。私は同じエラーに遭遇し、まさにそれをすることで解決しました。
IISでサイトを実行している場合、アプリケーションプールのIDを管理者に設定する必要がある場合があります。
このエラーと思われるものに遭遇しました。 Windowsで実行していて、管理者のWindowsユーザーがデータベースに対する管理者権限を持っていないことがわかりました。
"C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\Binn\sqlservr.exe" -m -s SQLEXPRESS
sqlcmd -S .\SQLEXPRESS
sp_addsrvrolemember 'domain\user', 'sysadmin'
GO
クレジット: https://social.msdn.Microsoft.com/Forums/sqlserver/en-US/76fc84f9-437c-4e71-ba3d-3c9ae794a7c4/
ステップ1:ローカルアカウントから切断します。
ステップ2:管理ユーザーで再びサーバーに接続します
ステップ3:オブジェクトエクスプローラー->セキュリティ->ログイン->サーバー名を右クリック->プロパティ->サーバーロール-> sysadmin-> OK
ステップ4:ローカルログインを切断して接続し、データベースを作成します。
接続文字列がWeb.Configにあることを確認します。そのノードを削除してWeb.Debug.configに配置しましたが、これは受け取ったエラーです。それをWeb.configに戻し、うまく機能しました。
上記の融合であるため、私がしなければならなかったことを追加します。 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();
}
Visual Studioを管理者として実行し、SQL SERVER認証ログイン(DBを作成する権限を持つ)とパスワードを接続文字列に入れます。
私にとっては、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'
私のために働いた解決策は、edmxファイルを作成するときにデータベース最初のウィザードを実行したときに作成されたEntity Framework接続文字列を使用することでした。接続文字列には、「metadata = res:///PSEDM.csdl|res:///PSEDM.ssdl |」などのメタデータファイル参照が必要です。 res://*/PSEDM.msl」。また、接続文字列は、呼び出し元アプリケーションの構成に含まれている必要があります。
その方向に私を指すために、この投稿へのHT: DbContextを使用した最初のモデル、新しいデータベースの初期化に失敗します
この問題の解決策は、ケーキを食べるのと同じくらい簡単です。この問題は一般に、ユーザー資格情報が変更され、SQLサーバーがユーザーを識別できない場合に発生します。既存のSQLサーバーインスタンスをアンインストールする必要はありません。新しいインスタンス名を持つインスタンス。最後のインスタンス名が 'Sqlexpress'だった場合、インストール中にインスタンスに 'Sqlexpress1'と名前を付けます。また、インストール中に混合モード(つまり、SQL Server認証とWindows認証)を選択し、将来そのような問題が発生した場合に便利なシステム管理パスワードを提供することを忘れないでください。この解決策は間違いなくこの問題を解決します。ありがとう。
私は自分の解決策を証明するものではなく、単なる仮定を持っています。
私の場合、接続文字列のドメイン名が原因です。 DNSサーバーが利用できない場合、データベースに接続できないため、Entity Frameworkがこのデータベースを作成しようとするという前提があります。しかし、許可は拒否されます。これは正しいです。
私は同じ問題を抱えていたので、インターネットで入手可能なものをすべて試しました。しかし、SSMS RUN AS ADMINISTRATORは私のために機能します。それでも問題が解決しない場合は、SQL SERVERをダウンロードしておく必要があります。