非域内Linux主机通过Kerberos认证连接域外SQL Server的可行性及配置咨询
我完全懂你现在的困扰——想从一台没加入目标域的Linux机器,用域账号连接SQL Server,但目前只有把Linux加入域后用kinit拿票据才能成功,不在域里的话kinit就报错,不过你已经能用Samba跨域访问共享目录,这确实说明这种连接应该是可行的。
答案很明确:完全可以不用把Linux主机加入SQL Server所在的域,就能实现域账号连接。下面是具体的配置思路和步骤,帮你解决这个问题:
第一步:配置Kerberos客户端
首先得在Linux上装好Kerberos客户端工具,不同发行版包名不一样:Debian/Ubuntu用krb5-user,CentOS/RHEL用krb5-workstation。
然后编辑/etc/krb5.conf这个核心配置文件,把目标域的Kerberos信息填进去:
在[realms]区块添加目标域的KDC(域控制器)信息:YOUR_DOMAIN.COM = { kdc = dc.your_domain.com admin_server = dc.your_domain.com default_domain = your_domain.com }再在
[domain_realm]区块添加域名和域的映射:.your_domain.com = YOUR_DOMAIN.COM your_domain.com = YOUR_DOMAIN.COM记得把上面的
YOUR_DOMAIN.COM和dc.your_domain.com换成你实际的域名和域控制器地址。第二步:正确使用
kinit获取票据
当Linux不在域内时,kinit需要明确指定域用户的完整主体名,不能只输用户名。命令格式是:kinit -V your_domain_user@YOUR_DOMAIN.COM执行后输入域用户的密码,成功后用
klist命令就能看到获取到的有效票据。如果还是失败,先检查域控制器的网络连通性(确保88端口的UDP/TCP都能通),再确认账号密码是否正确、账号有没有被锁定。第三步:配置SQL Server客户端(以
sqlcmd为例)
确保你已经装了微软的ODBC驱动(比如msodbcsql17或msodbcsql18),然后用带Kerberos认证的命令连接:sqlcmd -S your_sql_server_host -E -K IntegratedSecurity=SSPI这里的
-E表示用Windows集成认证(也就是Kerberos),前提是你已经通过kinit拿到了有效的票据。如果需要指定SPN(SQL Server的服务主体名称),可以加上ServerSPN参数,比如:sqlcmd -S your_sql_server_host -E -K IntegratedSecurity=SSPI;ServerSPN=MSSQLSvc/sql_server_host:1433@YOUR_DOMAIN.COM为什么Samba能成功?
你用Samba跨域访问共享的思路是对的——Samba本质是通过NTLM或Kerberos完成了身份验证,而SQL Server同样支持Kerberos认证,只要Linux上的Kerberos客户端配置正确,能拿到有效的域用户票据,就能和SQL Server完成身份校验,不需要把Linux加入域。
备注:内容来源于stack exchange,提问作者SHR

