如何在Linux命令行执行Azure Synapse托管SQL池SQL语句及Kerberos配置
在Linux命令行执行Azure Synapse托管SQL池SQL命令的简便方案(含Kerberos认证配置)
核心结论
- 简便执行方式:最贴合你现有使用习惯的方案是使用
sqlcmd工具配合Azure Active Directory(AD)认证;也可使用Azure CLI的az synapse sql query命令直接执行SQL。 - Kerberos认证支持:可以通过Kerberos认证(配合
sqlcmd的-G选项)连接Azure Synapse托管SQL池,配置步骤如下:
配置步骤(基于现有Kerberos环境)
1. 确保sqlcmd版本符合要求
需要使用mssql-tools18及以上版本,旧版本可能不支持Synapse的AD Kerberos认证。检查版本:
sqlcmd -? | grep Version
若版本过低,可通过官方源更新安装(以Ubuntu为例):
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list sudo apt update && sudo apt install mssql-tools18 unixodbc-dev
2. 配置Kerberos客户端适配Azure AD
编辑/etc/krb5.conf文件,添加你的Azure AD租户对应的Kerberos Realm配置(替换<your-aad-domain>为实际的AD域名,如contoso.com或contoso.onmicrosoft.com):
[libdefaults] default_realm = <your-aad-domain> dns_lookup_realm = true dns_lookup_kdc = true [realms] <your-aad-domain> = { kdc = kerberos.<your-aad-domain> admin_server = kerberos.<your-aad-domain> default_domain = <your-aad-domain> } [domain_realm] .<your-aad-domain> = <your-aad-domain> <your-aad-domain> = <your-aad-domain>
保存后重启Kerberos服务(部分系统无需重启,直接生效):
sudo systemctl restart krb5kdc
3. 获取Azure AD的Kerberos票据
使用kinit命令获取AD用户的Kerberos票据:
kinit your-aad-username@<your-aad-domain>
输入AD用户密码后,用klist验证票据是否有效:
klist
若输出包含有效票据条目,说明获取成功。
4. 使用sqlcmd连接Synapse托管SQL池
执行以下命令连接(替换<synapse-workspace-name>为你的Synapse工作区名称,<pool-name>为托管SQL池名称):
sqlcmd -S <synapse-workspace-name>.sql.azuresynapse.net,1433 -d <pool-name> -G
-G选项指定使用AD认证,此时会自动读取已获取的Kerberos票据完成身份验证;- 若需要直接执行SQL命令,可添加
-Q参数:sqlcmd -S <synapse-workspace-name>.sql.azuresynapse.net,1433 -d <pool-name> -G -Q "SELECT TOP 10 * FROM your_table;"
常见问题排查
- 票据获取失败:检查
krb5.conf的Realm配置是否正确,确保本地网络能访问Azure AD的KDC服务器; - 认证错误:使用
kdestroy销毁旧票据后重新执行kinit,或检查Synapse中是否已为该AD用户分配了数据库访问权限; - 连接超时:确认本地防火墙允许访问Synapse的1433端口,且Synapse工作区的防火墙规则已放行你的IP地址。
内容的提问来源于stack exchange,提问作者Danny.Icha
相关产品推荐
相关产品推荐

