Trusted Authentication fails with Code First
--------------------------------------------

                 Key: DNET-893
                 URL: http://tracker.firebirdsql.org/browse/DNET-893
             Project: .NET Data provider
          Issue Type: Bug
    Affects Versions: 6.7.0.0
         Environment: Windows 10, Firebird Super Server 2.5, Visual Studio 
2019, Entity Framework 6.1.3, Code First
            Reporter: LC Arch Team
            Assignee: Jiri Cincura


*Observed Behavior:
Querying the database via LINQ to entities fails with an 
InvalidOperationException: No user name was specified. 

*Expected Behavior*
No exception

*Cause*
FbProviderServices.GetDbProviderManifestToken creates a new connection through 
FbServerProperties if the given DbConnection is not already open. 
FbServerProperties, or more specifically its base classe, FbService does not 
support Trusted Authentication. FbService.Open specifically checks for the 
existence of a user name and password and throws an exception. 

FbService.cs:
{code}
                protected void Open()
                {
                        if (State != FbServiceState.Closed)
                                throw new InvalidOperationException("Service 
already Open.");
                        if (string.IsNullOrEmpty(_csManager.UserID))
                                throw new InvalidOperationException("No user 
name was specified.");
                        if (string.IsNullOrEmpty(_csManager.Password))
                                throw new InvalidOperationException("No user 
password was specified.");
{code}

By contrast, FbConnectionInternal first checks for the existence of a user name 
and password, and branches into trusted authentication. 
FbConnectionInternal.cs:
{code}
    public void Connect()
    {
      if (Charset.GetCharset(this.options.Charset) == null)
        throw new FbException("Invalid character set specified");
      try
      {
        this.db = ClientFactory.CreateDatabase(this.options);
        this.db.Charset = Charset.GetCharset(this.options.Charset);
        this.db.Dialect = (short) this.options.Dialect;
        this.db.PacketSize = this.options.PacketSize;
        DatabaseParameterBuffer dpb = this.BuildDpb(this.db, this.options);
        if (this.options.FallIntoTrustedAuth)
          this.db.AttachWithTrustedAuth(dpb, this.options.DataSource, 
this.options.Port, this.options.Database);
        else
          this.db.Attach(dpb, this.options.DataSource, this.options.Port, 
this.options.Database);
      }
{code}

*Workaround*
Opening the connection manually before passing it into DbContext is a 
workaround.

*Stack Trace*
>       
> FirebirdSql.Data.FirebirdClient.dll!FirebirdSql.Data.Services.FbService.Open()
>  Line 108 C#
        
FirebirdSql.Data.FirebirdClient.dll!FirebirdSql.Data.Services.FbService.QueryService(byte[]
 items) Line 346     C#
        
FirebirdSql.Data.FirebirdClient.dll!FirebirdSql.Data.Services.FbService.ProcessQuery(byte[]
 items, System.Action<bool, object> queryResponseAction) Line 235    C#
        
FirebirdSql.Data.FirebirdClient.dll!FirebirdSql.Data.Services.FbService.Query(byte[]
 items) Line 199    C#
        
FirebirdSql.Data.FirebirdClient.dll!FirebirdSql.Data.Services.FbServerProperties.GetInfo(int
 item) Line 87      C#
        
FirebirdSql.Data.FirebirdClient.dll!FirebirdSql.Data.Services.FbServerProperties.GetString(int
 item) Line 77    C#
        
EntityFramework.Firebird.dll!FirebirdSql.Data.EntityFramework6.FbProviderServices.GetDbProviderManifestToken(System.Data.Common.DbConnection
 connection) Line 154       C#
        
EntityFramework.dll!System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(System.Data.Common.DbConnection
 connection)      Unknown
        
EntityFramework.dll!System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(System.Data.Entity.Core.Common.DbProviderServices
 providerServices, System.Data.Common.DbConnection connection)   Unknown
        
mscorlib.dll!System.Collections.Concurrent.ConcurrentDictionary<System.Tuple<System.Type,
 string, string>, string>.GetOrAdd(System.Tuple<System.Type, string, string> 
key, System.Func<System.Tuple<System.Type, string, string>, string> 
valueFactory) Unknown
        
EntityFramework.dll!System.Data.Entity.Utilities.DbConnectionExtensions.GetProviderInfo(System.Data.Common.DbConnection
 connection, out System.Data.Entity.Core.Common.DbProviderManifest 
providerManifest)     Unknown
        
EntityFramework.dll!System.Data.Entity.DbModelBuilder.Build(System.Data.Common.DbConnection
 providerConnection) Unknown
        
EntityFramework.dll!System.Data.Entity.Internal.LazyInternalContext.CreateModel(System.Data.Entity.Internal.LazyInternalContext
 internalContext)        Unknown
        
EntityFramework.dll!System.Data.Entity.Internal.RetryLazy<System.Data.Entity.Internal.LazyInternalContext,
 
System.Data.Entity.Infrastructure.DbCompiledModel>.GetValue(System.Data.Entity.Internal.LazyInternalContext
 input)   Unknown
        
EntityFramework.dll!System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
 Unknown
        
EntityFramework.dll!System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(System.Type
 entityType)  Unknown
        
EntityFramework.dll!System.Data.Entity.Internal.Linq.InternalSet<Settings.DataAccess.Entities.SettingEntity>.Initialize()
       Unknown
        
EntityFramework.dll!System.Data.Entity.Internal.Linq.InternalSet<Settings.DataAccess.Entities.SettingEntity>.InternalContext.get()
      Unknown
        
EntityFramework.dll!System.Data.Entity.Infrastructure.DbQuery<Settings.DataAccess.Entities.SettingEntity>.System.Linq.IQueryable.Provider.get()
 Unknown
        
System.Core.dll!System.Linq.Queryable.Where<Settings.DataAccess.Entities.SettingEntity>(System.Linq.IQueryable<Settings.DataAccess.Entities.SettingEntity>
 source, 
System.Linq.Expressions.Expression<System.Func<Settings.DataAccess.Entities.SettingEntity,
 bool>> predicate) Unknown


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://tracker.firebirdsql.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


_______________________________________________
Firebird-net-provider mailing list
Firebird-net-provider@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/firebird-net-provider

Reply via email to