2017-01-23 4 views
0

Ich baue eine ASP.NET, Code-First Web App. Ich benutze eine firmeneigene Datenbank und habe Crud-Berechtigungen für Tabellen innerhalb einer Datenbank auf diesem Server. Ich glaube nicht, dass ich "Create Database" -Berechtigungen habe. Ich stoße auf Probleme, meine Web-App zu veröffentlichen. Ich kann alles lokal laufen, aber wenn ich den Code auf dem Server, den ich wie bekommen Fehler Unternehmen veröffentlichen:Warum muss ich Datenbankberechtigungen für die asp.net Web App erstellen?

Format of the initialization string does not conform to specification starting at index 0. 
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.ArgumentException: Format of the initialization string does not conform to specification starting at index 0. 

Source Error: 
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace: 
[ArgumentException: Format of the initialization string does not conform to specification starting at index 0.] 
    System.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue) +1742 
    System.Data.Common.DbConnectionOptions.ParseInternal(Hashtable parsetable, String connectionString, Boolean buildChain, Hashtable synonyms, Boolean firstKey) +191 
    System.Data.Common.DbConnectionOptions..ctor(String connectionString, Hashtable synonyms, Boolean useOdbcRules) +136 
    System.Data.SqlClient.SqlConnectionString..ctor(String connectionString) +75 
    System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous) +35 
    System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(DbConnectionPoolKey key, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions) +241 
    System.Data.SqlClient.SqlConnection.ConnectionString_Set(DbConnectionPoolKey key) +78 
    System.Data.SqlClient.SqlConnection.set_ConnectionString(String value) +116 
    System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch(TTarget target, Action`2 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed) +104 
    System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.SetConnectionString(DbConnection connection, DbConnectionPropertyInterceptionContext`1 interceptionContext) +434 
    System.Data.Entity.Internal.LazyInternalConnection.TryInitializeFromAppConfig(String name, AppConfig config) +39 
    System.Data.Entity.Internal.LazyInternalConnection.Initialize() +160 
    System.Data.Entity.Internal.LazyInternalConnection.get_Connection() +16 
    [Project].DBContext.Context..ctor() in C:\Users\[UserName]\Documents\[FilePath]\[Project]\DBContext\Context.cs:20 
    [Project].Data_Manager.DataManager..ctor() in C:\Users\[UserName]\Documents\[FilePath]\[Project]\Data_Manager\DataManager.cs:15 
    [Project].Controllers.HeaderController..ctor() in C:\Users\[UserName]\Documents\[FilePath]\[Project]\Controllers\HeaderController.cs:12 

Dieser Fehler macht ich glaube, ich habe ein Problem mit meiner Verbindungszeichenfolge. Wenn Unit Testing verwenden, erhalte ich die Fehlermeldung:

An exception of type 'System.Data.SqlClient.SqlException' occurred in EntityFramework.dll but was not handled in user code 

Additional information: CREATE DATABASE permission denied in database 'master'. 

ich meinen Kontext Konstruktor vor kurzem von geändert:

public Context() : base("[server_Name].[database_name]") 
{} 

zu:

public Context() : base("[server_Name].[full_company_server_file_path]") 
{} 

Und wenn ich die Lösung lokal lief, auch habe den Fehler "CREATE DATABASE permission denied in database 'master'" bekommen.

Für die Aufzeichnung meine Verbindungszeichenfolge ist:

<connectionStrings> 
     <clear /> 
    <add name="[server_Name].[database_name]" providerName="System.Data.SqlClient" connectionString="Data Source=[server_Name].[full_company_server_file_path];Initial Catalog=[database_name];Persist Security Info=True;User ID=userid;Password=password;MultipleActiveResultSets=True;Application Name=EntityFramework" /> 
< /connectionStrings> 

Meine Frage ist:

Warum benötige ich Datenbankberechtigungen, um das alles zu arbeiten, erstellen? Und wenn das nicht der Fall ist, warum bekomme ich diesen Fehler? (Nein, wo in meinem Code sage ich create DB, noch sollte/kann ich).

Zweitens, irgendwelche Vorschläge zur Behebung meiner Verbindungszeichenfolge? Ich habe diesen connectionString aus der Datenbank -> Eigenschaften -> Connection String (so dass ich das Gefühl habe, dass es korrekt ist).

Danke für alle Hilfe/Tipps/Erklärungen.

Verwendung:

  • ASP.NET/Entity Framework/C#
  • Visual Studio 2015
  • SQL Server Management Studio 2014
+0

Können Sie die Datenbank manuell auf diesem Server erstellen? Ich meine, indem ich mich mit dem angegebenen Berechtigungsnachweis direkt an den SQL Server im SQL Management Studio anmelde. – Amir

+0

Ich bin mir nicht sicher, ob ich das kann, aber ich denke nicht. Es ist ein sehr großes Unternehmen, und ich denke nicht, dass man sich mit solchen Dingen herumschlagen muss. – swallis1

+0

Es wäre besser, wenn Sie eine Testdatenbank erstellen und später löschen könnten und herausfinden würden, ob Sie die Berechtigung haben oder nicht. – Amir

Antwort

0

SOLUTION

Für all neugierig, im Prozess der Veröffentlichung (native Visual Studio Aktion) wurde die Verbindungszeichenfolge wird verstümmelt Verbindungszeichenfolge und das behob das Problem.

0

Es gibt nichts, viel können Sie hier tun, außer bekommen die Berechtigungen für Ihre Anwendung, solche Aktivitäten auf dem Datenbankserver auszuführen, was in großen Organisationen sehr unwahrscheinlich ist.

Die beste Lösung besteht darin, den Datenbankerstellungsvorgang nicht als Teil des Webanwendungsveröffentlichungsprozesses einzubeziehen.

Sicherlich kann die Richtlinie der Organisation nicht zulassen, dass die Anwendung mit Master-DB-Rechten ausgeführt wird.

Überlassen Sie die Datenbankerstellungsaktivität den DBAs, die die DB-Server und die Datenbanken verwalten. Sie verfügen über den erforderlichen Zugriff und die erforderlichen Berechtigungen zum Ausführen solcher Vorgänge. Sie erstellen eine Datenbank und führen das Skript aus, um Ihre Datenbank für die Anwendung bereit zu machen.

Erstellen Sie ein Skript, das die gesamte Datenbankstruktur einschließlich Tabellen, Sichten, gespeicherten Prozeduren, Funktionen, Schlüsseln, Indizes usw. erstellt und ein Ticket oder RFC anlegt oder einen beliebigen Prozess ausführt, um die Datenbank mit der richtigen Struktur auf dem Ziel zu erstellen Server.Lassen Sie Ihre Anwendung nur mit den Daten umgehen, ohne sich Gedanken über die Erstellung und Aktualisierung von Datenbanken machen zu müssen.

So funktionieren die Anwendungen in der Produktionsumgebung und so werden die Prozesse implementiert und mit sehr seltenen Ausnahmen verfolgt.

connectionString="$(ReplacableToken_[server_name].[database_name]-Web.config Connection String_0)" 

Ich habe die veröffentlichte Verbindungszeichenfolge meines real:

+0

Ich versuche nicht, eine Datenbank in meinem Code zu erstellen. Ich erstelle Tabellen, die ich auf dem Server ausführen darf. Ich bin in der Lage, Tabellen zu erstellen, gespeicherte Prozeduren zu erstellen, Tabellen zu aktualisieren, Tabellen zu löschen usw. Ich habe dies erfolgreich in SQL Server Management Studio und im Code - lokal getan. Ich stoße auf Probleme, wenn ich versuche, von der veröffentlichten Entwicklungsumgebung auf die db zuzugreifen - sogar eine select-Anweisung stürzt den Code ab. – swallis1

+0

Der lokale Datenbankserver und der Unternehmensdatenbankserver sind nicht identisch. Der Fehler besagt, dass die Berechtigung zum Erstellen der Datenbank verweigert wurde. Das bedeutet, EF versucht zuerst eine Datenbank zu erstellen, da sie nicht auf dem Dev-Server existiert. Sie müssen also zunächst die Datenbank von DBA erstellen lassen und auch die Berechtigung für den Schemaeigentümer für den Benutzer anfordern, der Teil Ihrer Verbindungszeichenfolge ist. –

+0

Die Anordnung funktioniert jedoch nur in der Entwicklungsumgebung. Für die Staging- und Produktionsumgebung ist die db-Besitzerrolle überhaupt nicht erlaubt. Ihre Anwendung darf nur Daten auswählen, aktualisieren, löschen, gespeicherte Prozeduren ausführen oder etwas anderes, das für die Anwendung benötigt wird, um korrekt zu rumspielen. Schema change bu-Anwendung wird in Phase und Produktumgebung sicher überhaupt nicht erlaubt. –

Verwandte Themen