System.Private.CoreLib:执行函数时发生异常:System.Data.SqlClient:不支持关键字:'authentication'

时间:2019-02-07 16:24:29

标签: azure .net-core entity-framework-core azure-sql-database azure-functions

我正在编写一个函数,用于使用实体框架核心记录上传到blob存储帐户的每个文件中的信息。当我尝试连接到Azure SQL数据库时,出现以下错误:

  

System.Private.CoreLib:执行函数BlobStorageLogging时发生异常。 System.Data.SqlClient:不支持关键字:“身份验证”

我从azure门户复制了我的连接字符串:

  

“ DefaultConnection”:{         “ ConnectionString”:“服务器= tcp:dbserver.database.windows.net,1433;初始目录= loggingdb;持久安全信息= False;用户ID = {*****};   MultipleActiveResultSets = False; Encrypt = True; TrustServerCertificate = False; Authentication = \“ Active Directory Integrated \”;“,

     

“ ProviderName”:“ System.Data.SqlClient”       }

引起错误的代码是:

  var optionsBuilder = new DbContextOptionsBuilder<LoggingDBContext>();
            var options = optionsBuilder.UseSqlServer(connectionString, providerOptions => providerOptions.CommandTimeout(60)).Options;
            using (var context = new LoggingDBContext(options))
            {
                context.Database.ExecuteSqlCommand("TRUNCATE TABLE  [dbo].[BlobInfo]");

我尝试删除身份验证,但这导致了未经授权的错误。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

目前预计会出现异常,请检查thread

  

.NET Core的SqlClient仍然不支持在连接字符串中使用'authentication'关键字。当this issue实际上是固定的时,就会发生这种情况。

     

为了在.NET Core 2.2的新版本的SqlClient中使用AAD,客户需要使用ADAL.NET自己获取访问令牌,然后在SqlConnection上设置AccessToken属性

这意味着在.NET Core中,Active Directory Integrated authentication不可用,要使用Active Directory password authentication,我们必须获取在EF配置中似乎不理想的访问令牌。

解决方法是对SQL authentication使用连接字符串。