适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
Microsoft Fabric 中的 SQL 数据库
连接到 Azure SQL 数据库、Azure SQL 托管实例、Microsoft Fabric、Azure Synapse Analytics 或 SQL Server 2022(16.x)及更高版本中的 SQL 数据库时, 大容量复制程序实用工具(bcp) 支持多个Microsoft Entra ID 身份验证模型。
若要检查已安装 的 bcp 是否支持Microsoft Entra 身份验证,请运行 bcp --help 并验证是否 -G 显示在可用参数列表中。
平台限制
并非所有身份验证模式都可在每个平台上使用:
Microsoft仅 Windows 上支持 Entra 交互式身份验证。
Microsoft Entra 集成身份验证在 Linux 和 macOS 上需要 Microsoft ODBC Driver 18 for SQL Server(如果无法升级到驱动程序 18,则需要驱动程序 17.6.1 或更高版本)和 正确配置的 Kerberos 环境。
Linux 和 macOS 仅支持使用访问令牌文件(
-P <token_file>)进行身份验证。
Microsoft Entra 用户名和密码
提供-G,并附上-U(用户名)和-P(密码)。
以下示例将表bcptest从数据库testdbcontoso.database.windows.net导出到文件c:\last\data1.dat。 将 <password> 替换为有效的密码。
bcp bcptest out "c:\last\data1.dat" -c -S contoso.database.windows.net -d testdb -G -U alice@contoso.onmicrosoft.com -P <password>
以下示例导入相同的数据:
bcp bcptest in "c:\last\data1.dat" -c -S contoso.database.windows.net -d testdb -G -U alice@contoso.onmicrosoft.com -P <password>
Microsoft Entra 已集成
提供 -G 不带 -U 或 -P。 当前 Windows 帐户(或 Linux/macOS 上的 Kerberos 标识)必须与 Microsoft Entra ID 联合。 在以下示例中,将 <server> 替换为您的服务器名称。
出口:
bcp bcptest out "c:\last\data2.dat" -S <server>.database.windows.net -d testdb -G -c
进口:
bcp bcptest in "c:\last\data2.dat" -S <server>.database.windows.net -d testdb -G -c
Microsoft Entra 托管服务标识
通过配置的 DSN 以系统分配或用户分配的托管身份进行身份验证。 相同的方法适用于 bcp in 和 bcp out。
Important
bcp 与它的驱动程序紧密耦合。
bcp 的主版本必须与 DSN 创建的驱动程序的主版本匹配。 若要确定 bcp 版本,请运行 bcp -v。
通过 ODBC 数据源管理员配置 DSN:
- 按键盘上的 Windows 键。
- 键入
ODBC并选择 相应的 ODBC 数据源管理员版本。 - 选择 “用户 DSN ”或“ 系统 DSN ”选项卡。
- 选择 “添加 ”并按照提示进行操作。
- 当系统要求提供身份验证类型时,请选择 “Azure 托管服务标识身份验证”。
- 对于用户分配的托管标识,请将
Object (principal) ID标识粘贴到身份验证选项卡上的 “登录 ID ”框中。 - 继续按照提示完成 DSN 配置。
有关包括屏幕截图的完整演练,请参阅在 UI 中创建和编辑 DSN。
使用 -D 标志指示传递给 -S 的值是 DSN。
-D和-S开关可以在命令行上以任意顺序出现。
bcp bcptest out "c:\last\data1.dat" -c -D -S myDSN -d testdb
Microsoft Entra ID 访问令牌
仅适用于:Linux 和 macOS。 Windows 系统不被支持。
Linux 和 macOS 上的 bcp 17.8 及更高版本可以使用访问令牌进行身份验证。 以下示例使用 Azure CLI 检索令牌并将其写入安全临时文件。
Important
令牌文件必须是没有 BOM 的 UTF-16LE。 在不再需要文件时限制文件权限并删除该文件,如以下示例所示。
系统分配的托管标识
将 <server> 替换为您的服务器名称。
使用托管标识登录:
az login --identity检索令牌,将其写入安全临时文件,然后运行 bcp:
# Create a secure temporary file for the token tokenFile=$(mktemp) chmod 600 "$tokenFile" # Retrieve the access token and write it as UTF-16LE without BOM az account get-access-token --resource https://database.windows.net --output tsv | cut -f 1 | tr -d '\n' | iconv -f ascii -t UTF-16LE > "$tokenFile" # Run bcp with the token file bcp bcptest out data2.dat -S <server>.database.windows.net -d testdb -G -P "$tokenFile" -c # Clean up token file rm -f "$tokenFile"
用户分配的管理标识
使用用户分配的托管标识登录。 将
<client_id>替换为适合您环境的有效值。az login --identity --username <client_id>检索令牌,将其写入安全临时文件,然后运行 bcp。 将
<server>替换为适合您环境的有效值。# Create a secure temporary file for the token tokenFile=$(mktemp) chmod 600 "$tokenFile" # Retrieve the access token and write it as UTF-16LE without BOM az account get-access-token --resource https://database.windows.net --output tsv | cut -f 1 | tr -d '\n' | iconv -f ascii -t UTF-16LE > "$tokenFile" # Run bcp with the token file bcp bcptest out data2.dat -S <server>.database.windows.net -d testdb -G -P "$tokenFile" -c # Clean up token file rm -f "$tokenFile"
Microsoft Entra 交互式界面
仅适用于:Windows。 不支持 Linux 和 macOS。
Microsoft Entra 交互式身份验证使用对话框进行身份验证,并支持多重身份验证(MFA)。 交互式身份验证需要 bcp版本 15.0.1000.34 或更高版本,以及 ODBC Driver 18 for SQL Server (或驱动程序 17.2 或更高版本)。
仅提供 -G-U (用户名)。 不包括 -P。
bcp 提示输入密码;对于启用了 MFA 的帐户,将完成配置的 MFA 流程。
bcp bcptest out "c:\last\data1.dat" -c -S contoso.database.windows.net -d testdb -G -U alice@contoso.onmicrosoft.com
对于来自联合域的 Windows 帐户的 Microsoft Entra 用户,请在用户名中包含域(例如,joe@contoso.com):
bcp bcptest out "c:\last\data1.dat" -c -S contoso.database.windows.net -d testdb -G -U joe@contoso.com
如果 Microsoft Entra 租户中的来宾用户属于在 Azure SQL 数据库中具有数据库权限的组,请使用来宾用户别名(例如, keith0@adventure-works.com)。
相关内容
- bcp 实用工具
- 下载并安装 bcp 实用工具
- 如何使用 bcp 实用工具
- Microsoft Entra 身份验证用于 Azure SQL
- Microsoft Fabric 中的 SQL 数据库中的身份验证
获取帮助
- 关于 SQL 的想法:您对改进 SQL Server 有建议吗?
- Microsoft Q&A (SQL Server)
- DBA Stack Exchange (标签 sql-server):提出 SQL Server 问题
- Stack Overflow (标签 sql-server):SQL 相关开发问题的答案
- Microsoft SQL Server许可条款和信息
- 企业用户支持选项
- 更多 SQL Server 帮助和反馈
参与编辑 SQL 文档
你是否知道你可以自行编辑 SQL 内容? 你如果这样做,不仅可以帮助改进我们的文档,还可以获得页面贡献者的殊荣。
有关详细信息,请参阅 Edit Microsoft Learn 文档。