【问题标题】:Error reading data from MS Access database using RODBC package使用 RODBC 包从 MS Access 数据库读取数据时出错
【发布时间】:2020-05-08 03:10:00
【问题描述】:

我有数百个单独的 MS Access 文件,其中包含各个位置的数据,每个文件都具有相同的表结构。不是用所有这些文件创建一个数据库,而是将它们都保存在不同的文件夹位置。我正在尝试将数据整理到一个地方,以便它更有用,并且我正在探索 RODBC 包以执行此操作。

我正在使用 32 位 Rstudio 中的 RODBC 包来访问我可以打开和读取的文件位置中的 MS Access 数据库。我可以建立文件连接并列出每个数据库的所有表对象,但每次我尝试查询或读取其中一个表时都会收到此错误:

[1] "42000 -1907 [Microsoft][ODBC Microsoft Access Driver] 记录 无法读取; 'HabitatUnits' 没有读取权限。” [2] “[RODBC] 错误:无法 SQLExecDirect 'SELECT * FROM HabitatUnits'"

我实验了另一个我创建的访问数据库,我能够读取数据没有问题,所以它必须是对其他数据集施加的限制。有没有办法授予访问权限,以便 R 可以读取这些数据,而无需通过每个数据库手动更改可访问性?

【问题讨论】:

    标签: r ms-access rodbc


    【解决方案1】:

    之前一定有人或某物对这些表具有读取权限。每个单独的表都不太可能有唯一的用户。

    因此,通过 RODBC 授予通用访问权限的方法是识别和使用正确的用户名和安全数据库。原始表格是如何创建的、由谁创建的以及从什么创建的?


    访问“工作组安全”的工作方式几乎与 Windows 安全工作完全相同。有用户和组,它们与 ID 值相关联。并且还有权限,与 ID 值相关联,如果您有正确的工作组文件,您可以将权限与用户和组相关联。

    默认用户名为“admin”并具有通用 ID 值。任何安装了 Access 副本的人都可以使用由 ID 值拥有的任何数据库对象,因为该 ID 值通常始终是默认值。

    如果您创建另一个用户,并使用该用户创建或获取对象的所有权,并删除授予通用“管理员”用户和通用“管理员”组和通用“用户”组的默认权限,则默认权限用户将没有读取权限。

    “管理员”密码本身毫无价值。 'admin' 用户是通用的,因此您可以使用系统工作组的副本,其中 'admin' 密码为空。如果有人给你一个“管理员”密码,这意味着要么密码没用,要么密码实际上是为了其他东西(可能是加密),或者密码是给别人的——不是“管理员”用户,而是用于对象创建/所有权的其他用户,您需要为其找到工作组和用户名。


    访问工作组权限的工作方式与 Windows 域权限相同,但它们不是一回事。它们是一个完全独立的系统,在 Windows 具有任何形式的安全性或身份验证或权限之前设计。用户列表保存在安全数据库(默认情况下,system.mdw)的表中。组列表位于同一数据库/文件中的表中。每个组中的用户列表位于同一数据库/文件中。以及与同一文件中的每个用户和组关联的 ID 值。

    通过查看 Access/Jet 数据库的隐藏系统表,您可以看到与表和其他对象的权限相关联的 ID 值。要将这些 ID 值与名称、组和密码匹配,您必须具有匹配的安全数据库。

    【讨论】:

    • 看起来大多数文件都是由一个人创建的,并且它们都只有一个用户/组(“管理员”)。没有标记任何权限,因此作为测试,我标记了“读取设计”和“读取数据”,但我仍然得到相同的错误。我尝试将 uid = "Admin" 添加到连接线,但这也没有改变任何东西。
    • 我与创建者交谈,他们提供了管理员密码,但这也没有改变错误。他们提到旧的数据库接口程序使用 .mdw 访问文件来登录。
    • 这是一个在该程序中成功使用的连接字符串:dBSourceFile = App.Path & "\StreamHabitatTemplate.mdb" sSourceConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & dBSourceFile _ & ";Jet OLEDB:Engine Type=5;" _ & ";用户 ID=新管理员;" _ & "Jet OLEDB:数据库密码=tenayalake;" & _ "Jet OLEDB:系统数据库= " & App.Path & "\System.mdw" & _ ";密码=特纳亚拉克”
    • 创建了一个“新管理员”管理员来保护数据库,这样默认的“管理员”用户就可以拥有文件的读取权限。我尝试指定该用户和关联的密码无济于事。在访问 .mdb 文件的“用户和组权限”下,“用户”和“当前用户”下仅列出了默认的“管理员”。没有为默认的“管理员”用户标记权限。在“组”下有两个名称列表:“管理员”和“用户”,所有权限都被标记。
    • 在文件属性的安全选项卡下,列出了几个组和用户,包括 SYSTEM、Administrators (FORFILE1\Administrators) 和 R1FOR-Everone (AD\R1FOR-Everyone),它们都具有读、写权限, 并修改权限以及只有读取和执行和读取权限的域管理员 (AD\Domain Admins) 用户名​​。如何指定正确的用户以便我可以在 R 中读取这些文件???我缺少什么信息?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 2016-03-31
    • 2016-10-09
    • 1970-01-01
    相关资源
    最近更新 更多