永久更改Microsoft Access DB的密码(通过Python)

问题描述 投票:2回答:1

现在不要困惑,我知道pyodbc库,以及它如何连接到受密码保护的Access文件。

我要问的是是否有一种Python方式来永久更改Access文件的密码。

更具体地讲我的问题:

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

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

((我可以从命令行运行Tableau Prep,并给它提供带有凭据的JSON文件,但是到目前为止,我所学到的内容不支持Access。)

所以到目前为止,我的想法/解决方案是(在python脚本中):1-从Access文件中删除密码(如何?)。 2-从命令行运行批处理文件以播放Tableau Prep(不会再出现错误,因为不再有密码)。 3-恢复密码。

TLDR:需要一种使用Python脚本删除Access DB密码的方法,以便我可以完全自动化运行Tableau Prep文件的过程。(顺带一提,我全都渴望新的建议)

python ms-access tableau
1个回答
0
投票

您可以使用COM来加密/解密数据库。这要求以匹配的位数安装Access数据库引擎,但是如果您可以使用ODBC驱动程序,您已经知道了。

from comtypes.client import CreateObject
import os
DBEngine = CreateObject('DAO.DBEngine.120')
dbLangGeneral = ';LANGID=0x0409;CP=1252;COUNTRY=0'

#Create a copy without a password
db = DBEngine.CompactDatabase('Path_to_database', 'Path_to_copy', dbLangGeneral + ';PWD=', password = ';PWD=MySuperSecretPass')
db.Close()
#Do stuff with copy

#Delete original
os.remove('Path_to_database')

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

正如您在代码中所看到的,您实际上不能在本地对数据库进行加密/未加密,但是可以使用CompactDatabase进行加密/未加密的副本。通过GUI加密时,您会注意到Access实际上在后台执行相同的操作。

此代码假定您使用dbLangGeneral作为排序规则常量,可以根据需要使用其他排序规则进行切换。

© www.soinside.com 2019 - 2024. All rights reserved.