ADO连接用户级加密的ACCESS数据库
最近做个项目需要连接到一个第3方软件用到的MDB数据库,该MDB文件是用户级加密,虽然合作方给了用户名,说没有密码,但是却无法用ADO进行查询,报没有权限。用ACCESS打开也是一样,无法看到表里的数据。于是到网上去搜,结果只搜到如何用ACCESS对MDB进行加密和打开加密文件,这个跟编程无关,就没细看。关于ADO连接加密MDB,却只有如何连接设置了密码的MDB,都是以默认的管理员登录,没有如何更改用户登录的说明,而用户级加密的MDB一般都是不给管理员任何权限的。这下只好自己摸索了,问题肯定是出在连接字符串上,于是尝试进行修改。一般的连接MDB字符串是如下格式:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=dest.mdb;Persist Security Info=True
连接设置了密码的MDB,是加上Jet OLEDB:Database Password=password,但是用户级加密的MDB却没有设置密码,只是换了个用户,同时不给管理员任何权限,需要换用户登录,于是加上User ID=username;,却报错:无法启动应用程序。工作组信息文件丢失,或是已被其它用户以独占方式打开。改了多次不行,只好再仔细看网上文章,知道必须要有相应的mdw文件才行,问合作方要到了mdw文件,按网上的方法用ACCESS打开了数据库,但是怎么把mdw加入连接字符串,却一点线索没有。百无聊赖在程序里打开系统的数据链接属性,在属性页“所有”里看到了这么个属性:Jet OLEDB:System database,眼睛一亮,莫非就是这个?试了一下,果然连接成功并能查询了!连接字符串如下:
Provider=Microsoft.Jet.OLEDB.4.0;User ID=username;Data Source=dest.mdb;Persist Security Info=True;Jet OLEDB:System database=xxx.mdw
再仔细研究了一下,发现如果不问合作方要这个mdw,也是有办法的,有工具可以看到mdb文件的密码和用户信息,在ACCESS里按看到的用户名和ID新建一个用户,然后把自己的mdw文件COPY出来加到连接字符串,同样可以连接并查询,MDB的安全性毕竟还是比较脆弱啊。
俗话说一文钱憋死英雄汉,在IT往往是一句话憋死程序员,不知道的还真就死在那儿了,以此备忘。转载请注明出处。
相关文档:
Take Equity Collection System as an example, Some other office collegues want to access it from home without VPN, The way to check is:
1. Check if it's limited in network, this needs to confirm with network people
2. If the step 1 passed, get the external IP address of the system, map ......
string sql = "select a.orderId,a.UserName,b.CodeValue as Delivery ,a.DeliveryAddress,a.PhoneNum,c.CodeValue as Payment,d.CodeValue as OrderStatus,d.CodeValue as OrderStatusID,a.OrderTime,a.Merchant from (( m_Order a ";
sql += " left j ......
接 2
方法3 :
这种方法也需要用户自己创建一个数据源,但是,所需要进行的步骤,比方法2要少上许多。
创建好用户表。
创建数据源(控制面板->数据管理->数据源 双击 -> 选择 文件 DSN -> 添加 -> Microsoft Access Driver -> 手动输入DSN 保存的位置及名称 -> 选择(S) 并选 ......