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)操作
- 用管理员权限账号(如sa或Windows管理员)登录到
BOOK-FFARDRU9TD实例。 - 展开数据库 -> Teste -> 安全性 -> 用户,右键选择新建用户。
- 在常规页:
- 用户类型选SQL用户,登录名选择
pierre(若不存在需先创建登录名)。
- 用户类型选SQL用户,登录名选择
- 在成员身份页:
- 勾选
db_datareader(读权限)和db_datawriter(写权限),或按需选择db_owner(完全控制权限)。
- 勾选
- 点击确定保存配置。
方式二:用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
相关产品推荐
相关产品推荐

