当我尝试运行以下代码时,出现以下错误。尝试引用其他帖子,但似乎没有帮助。
服务器主体"{Myuser}"在当前安全上下文下无法访问数据库"{数据库}"。(916) (SQLExecDirectW)'
import pyodbc
cnxn = pyodbc.connect("Driver={SQL Server};"
'Server=XXXXXXX;'
'Port=xxxx'
'Username={service_account}'
'Password={password of service_account}'
'Database={detabase};'
'Trusted_Connection=yes;')
results = cnxn.cursor()
results.execute('SELECT * FROM {database}.dbo.{tablename}')
for row in results:
print(row)
如果要将Microsoft的 ODBC 驱动程序用于 SQL Server 和 Trusted_Connection=yes
(SQL Server Windows 身份验证),则不会在连接字符串中传递 Windows 凭据。相反,您以 Windows 用户身份运行 Python 应用。做到这一点的方法包括
- 使用
RUNAS
命令从 Windows 命令提示符启动 Python 应用,或者 - right_clicking应用图标移开,然后选择"以其他用户身份运行"。
另一种选择可能是使用 FreeTDS ODBC 驱动程序。它支持较旧的 NTLM 身份验证协议,并允许您在连接字符串中指定域、UID 和 PWD(用于 Windows 身份验证)。
这对我有用:
import pyodbc
password = "<password>"
conn = pyodbc.connect("Driver={SQL Server};Server=<host>;Port=<port>;UID=
<username>;PWD=" + password + ";Database=<dbname>;")
cursor = conn.cursor()
cursor.execute('SELECT * FROM <table>')
for row in cursor:
print(row)