C程序连接MS SQL Server时SQL身份验证失效问题求助
问题根因
你遇到的问题是Windows系统自带的老旧{SQL Server}ODBC驱动对连接字符串的解析容错率极低,你写的参数中等号两边的多余空格会导致驱动无法正确识别身份验证相关参数,忽略参数后触发默认的Windows身份验证逻辑,因此始终使用当前系统的Windows账号尝试登录。
解决方案
按优先级依次尝试以下操作:
- 删除连接字符串所有参数中键、值、等号之间的多余空格,修正后的写法参考如下:
#define CONNECTION_STRING "DRIVER={SQL Server};SERVER=你的实例地址;DATABASE=你的库名;Integrated Security=no;User ID=你的SQL账号;Password=你的密码;"
- 如果修改空格后依然报错,替换为微软官方维护的新版ODBC驱动。自带的
{SQL Server}驱动是遗留版本,存在大量兼容性问题,安装ODBC Driver 17 for SQL Server或更高版本驱动后,替换连接字符串中的DRIVER参数即可,参考写法:
#define CONNECTION_STRING "DRIVER={ODBC Driver 17 for SQL Server};SERVER=你的实例地址;DATABASE=你的库名;Trusted_Connection=no;UID=你的SQL账号;PWD=你的密码;"
新版驱动对连接字符串的解析更规范,不会出现空格导致参数失效的问题,同时兼容所有现代SQL Server版本的特性。
- 小概率场景排查:检查你的ODBC API调用逻辑,确认是直接传入完整连接字符串,没有读取本地配置的ODBC数据源(DSN),DSN的优先级高于手动传入的连接字符串,会覆盖你配置的身份验证参数。
内容的提问来源于stack exchange,提问作者user3742046
相关产品推荐
相关产品推荐

