【问题标题】:Credentials using Invoke-Sqlcmd against sql azure针对 sql azure 使用 Invoke-Sqlcmd 的凭据
【发布时间】:2019-06-05 21:53:56
【问题描述】:

我正在尝试针对 sql azure 数据库运行 powershell 构建脚本,但收到 Login failed for user 'X'

我相当确信凭据是正确的,因为它们是直接从实时应用程序配置中获取的。

这是我正在使用的命令:

Invoke-Sqlcmd -InputFile "Build.sql" -ServerInstance $server -Database $database `
              -WarningAction SilentlyContinue -OutputSqlErrors $false  `
              -Username $username -Password $password -EncryptConnection

我在批处理文件中使用 sqlcmd,所以我想知道它是否与发送凭据的方式有关,trusted_connection=false 似乎不是我可以尝试的选项。

【问题讨论】:

    标签: powershell azure-sql-database


    【解决方案1】:

    可能是密码包含一些 Azure/Invoke-sqlcmd 无法处理的特殊字符(例如美元、单引号或双引号、括号)。我尝试使用 Azure 界面并用单引号括住密码(我们在密码中有一个美元符号),但这不起作用。所以,我们简单地删除了特殊字符,现在就可以了。见:Powershell Invoke-Sqlcmd Login Failedhttps://mohitgoyal.co/2017/08/09/vsts-azure-sql-database-deployment-task-keeps-failing-with-error-login-failed-for-user/

    【讨论】:

      【解决方案2】:

      连接到 SQL Azure 时,登录名的格式必须为 user@server。因此,如果您创建了一个用户“foo”和一个服务器“bar”,则登录名必须是foo@bar。见Managing Databases and Logins in Azure SQL Database

      由于某些工具以不同方式实现表格数据流 (TDS),您可能需要使用 <login>@<server> 表示法将 Azure SQL 数据库服务器名称附加到连接字符串中的登录名。在这些情况下,请使用 @ 符号分隔登录名和 Azure SQL 数据库服务器名称。例如,如果您的登录名为 login1,并且您的 Azure SQL 数据库服务器的完全限定名称为 servername.database.windows.net,则连接字符串的用户名参数应为:login1@servername

      CREATE LOGIN 也解释了这一点:

      在某些连接到 SQL 数据库的方法中,例如 sqlcmd,您必须使用 <login>@<server> 表示法将 SQL 数据库服务器名称附加到连接字符串中的登录名。例如,如果您的登录名是login1,SQL 数据库服务器的完全限定名称是servername.database.windows.net,则连接字符串的用户名参数应该是login1@servername

      【讨论】:

      • 感谢您的提示和网址,尽管我已经检查了三次。我想我可能不得不尝试使用不同的命令来查看是否是这样。有些东西告诉我它的身份验证模式,但网上的例子表明我做得正确。我什至使用相同的详细信息登录到在线管理 :(
      猜你喜欢
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      • 2018-07-15
      • 2016-07-28
      • 2013-06-09
      相关资源
      最近更新 更多