gpt4 book ai didi

python - 永久更改 Microsoft Access 数据库的密码(通过 Python)

转载 作者:行者123 更新时间:2023-12-04 01:27:56 26 4
gpt4 key购买 nike

我有一个受密码保护的 Microsoft Access 文件,我需要运行直接连接到该 Access 文件的 Tableau Prep 流程。 (例如,我需要每天运行它)

Tableau Prep 文件不存储连接信息,例如密码。

我可以从命令行运行 Tableau Prep 并为其提供一个包含凭据的 JSON 文件,但到目前为止,据我所知,它不支持 Access。

所以到目前为止我的想法/解决方案是(在 python 脚本中):1-

  1. 从 Access 文件中删除密码(如何?)
  2. 运行批处理文件以从命令行播放 Tableau Prep
  3. 找回密码

我的主要问题是不知道如何使用 Python 脚本删除 Access DB 的密码,因此我可以完全自动化运行 Tableau Prep 文件的过程。

最佳答案

您可以使用 pyodbc 和 ALTER DATABASE PASSWORD 命令(感谢 HansUp 指出这一点!)。

这仅适用于启用扩展 ANSI SQL 的独占连接。

您可以使用以下代码:

import pyodbc
constr = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Path\To\Db.accdb;Exclusive=1;Pwd=SuperSecurePassword;ExtendedAnsiSQL=1;'
#Exclusive connection, with password and extended ANSI SQL
cnxn = pyodbc.connect(constr)
crsr = cnxn.cursor()
#Decrypt
crsr.execute('ALTER DATABASE PASSWORD NULL SuperSecurePassword')
cnxn.commit()
cnxn.close()

#Perform operations here

constr = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Path\To\Db.accdb;Exclusive=1;ExtendedAnsiSQL=1;'
#Exclusive connection, extended ANSI SQL, no password
cnxn = pyodbc.connect(constr)
crsr = cnxn.cursor()
#Encrypt
crsr.execute('ALTER DATABASE PASSWORD SuperSecurePassword NULL')
cnxn.commit()
cnxn.close()

或者,您可以使用 COM 来加密/解密您的数据库。

import win32com.client as comclient
import os
DBEngine = comclient.Dispatch("DAO.DBEngine.120")
dbLangGeneral = ';LANGID=0x0409;CP=1252;COUNTRY=0'

#Create a copy without a password
DBEngine.CompactDatabase('Path_to_database', 'Path_to_copy', dbLangGeneral + ';PWD=', 0, ';PWD=MySuperSecretPass')

#Do stuff with copy

#Delete original
os.remove('Path_to_database')

#Create encrypted copy at location of original
DBEngine.CompactDatabase('Path_to_copy', 'Path_to_database', dbLangGeneral + ';PWD=MySuperSecretPass')
os.remove('Path_to_copy')

这会生成一个未加密的压缩数据库副本,然后执行操作,然后再次压缩它。

此代码假定您使用 dbLangGeneral 作为排序规则常量,您可以在需要时将其切换为不同的排序规则。

关于python - 永久更改 Microsoft Access 数据库的密码(通过 Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61508764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com