You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python连接SQL Server自定义数据库失败,求权限配置解决方法

解决pyodbc无法连接SQL Server自定义数据库的问题

1. 修正连接字符串的认证冲突

你的连接字符串同时指定了Trusted_Connection=yes(Windows身份认证)和UID/PWD(SQL Server身份认证),这会导致认证逻辑混乱——SQL Server会优先采用Windows认证,直接忽略你提供的SQL账号信息。

两种修正方案:

  • 使用SQL账号(pierre)登录:删除Trusted_Connection=yes行,修正后的代码:
import pyodbc as odbc
DRIVER_NAME ='SQL SERVER'
SERVER_NAME='BOOK-FFARDRU9TD'
DATABASE_NAME='Teste'
NAME='pierre'
PASS='987652'
connection_string=f"""
    DRIVER={{{DRIVER_NAME}}};
    SERVER={SERVER_NAME};
    DATABASE={DATABASE_NAME};
    UID={NAME};
    PWD={PASS};
    """
conn=odbc.connect(connection_string)
print("连接成功")
  • 使用Windows认证登录:删除UID和PWD行,保留Trusted_Connection=yes即可。

2. 配置SQL账号对Teste数据库的访问权限

如果修正连接字符串后仍报4060错误,说明账号pierre没有Teste数据库的访问权限,按以下步骤配置:

方式一:通过SQL Server Management Studio(SSMS)操作

  1. 用管理员权限账号(如sa或Windows管理员)登录到BOOK-FFARDRU9TD实例。
  2. 展开数据库 -> Teste -> 安全性 -> 用户,右键选择新建用户。
  3. 在常规页:
    • 用户类型选SQL用户,登录名选择pierre(若不存在需先创建登录名)。
  4. 在成员身份页:
    • 勾选db_datareader(读权限)和db_datawriter(写权限),或按需选择db_owner(完全控制权限)。
  5. 点击确定保存配置。

方式二:用SQL命令批量授权

如果不想用SSMS,执行以下SQL语句:

-- 确保pierre是SQL Server的登录账号(若已存在可跳过此段)
USE [master]
GO
CREATE LOGIN [pierre] WITH PASSWORD=N'987652', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO

-- 给Teste数据库添加用户并分配读写权限
USE [Teste]
GO
CREATE USER [pierre] FOR LOGIN [pierre]
GO
ALTER ROLE [db_datareader] ADD MEMBER [pierre]
GO
ALTER ROLE [db_datawriter] ADD MEMBER [pierre]
GO

3. 额外排查点

  • 确认Teste数据库确实存在于目标SQL Server实例中,检查数据库名拼写(SQL Server默认大小写不敏感,但特殊配置下需严格匹配)。
  • 确认SQL Server服务处于运行状态,且Python所在机器能访问实例(如未被防火墙阻止1433端口)。

内容的提问来源于stack exchange,提问作者Pierre bicho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 14:06:14