Ошибка чтения данных из базы данных MS Access с использованием пакета RODB C - PullRequest
0 голосов
/ 22 января 2020

У меня есть сотни отдельных файлов MS Access, которые содержат данные по отдельным местоположениям, каждый с идентичной структурой таблицы. Вместо того чтобы создавать одну базу данных со всеми этими файлами, все они были сохранены в разных местах папок. Я пытаюсь объединить данные в одном месте, чтобы они могли быть более полезными, и я исследую пакет RODB C для R, чтобы сделать это.

Я использую пакет RODB C в 32-битной Rstudio для доступа к базам данных MS Access в местах файлов, которые я могу открыть и прочитать. Я могу установить sh файловые соединения и вывести список всех табличных объектов для каждой базы данных, но каждый раз, когда я пытаюсь выполнить запрос или прочитать одну из таблиц, я получаю эту ошибку:

[1] «42000 -1907 [Microsoft] [ODB C Драйвер Microsoft Access] Записи не могут быть прочитаны; нет разрешения на чтение для« HabitatUnits ».» [2] "[RODBC] ОШИБКА: не удалось SQLExecDirect 'SELECT * FROM HabitatUnits'"

Я экспериментировал с другой созданной базой данных доступа, и я смог прочитать данные без проблем, поэтому должно быть ограничение, наложенное на другие наборы данных. Есть ли способ предоставить доступ, чтобы R мог читать эти данные, не просматривая каждую базу данных, чтобы вручную изменить доступность?

1 Ответ

0 голосов
/ 22 января 2020

Кто-то или что-то должно было иметь разрешение на чтение таблиц раньше. Маловероятно, что каждая отдельная таблица имеет уникального пользователя.

Таким образом, способ предоставить универсальный c доступ через RODB C состоит в том, чтобы идентифицировать и использовать правильное имя пользователя и базу данных безопасности. Как были созданы исходные таблицы, кто и из чего?


Access 'безопасность рабочей группы' работает почти так же, как Windows безопасность работает. Существуют пользователи и группы, которые связаны со значениями идентификаторов. И есть разрешения, которые связаны со значениями ID, и если у вас есть правильный файл рабочей группы, вы можете связать разрешения с пользователями и группами.

Пользователь по умолчанию называется 'admin' и имеет универсальное значение ID , Любой объект базы данных, которому принадлежит значение идентификатора, может использовать любой, у кого установлена ​​копия Access, потому что это значение идентификатора всегда всегда является значением по умолчанию.

Если вы создаете другого пользователя и используете этого пользователя для создания или владения объектом и удаления разрешения по умолчанию, предоставленного универсальной группе «admin» и универсальной группе «admins» и универсальной группе «users», тогда у пользователя по умолчанию не будет разрешения на чтение.

Пароль 'admin' сам по себе бесполезен. Пользователь 'admin' универсален, поэтому вы можете просто использовать копию системной рабочей группы, где пароль 'admin' пуст. Если кто-то дает вам пароль «admin», это означает, что пароль бесполезен, или что пароль фактически предназначен для чего-то другого (возможно, шифрования), или что пароль предназначен для кого-то другого - не пользователя «admin», но другой пользователь, используемый для создания объекта / владельца, для которого вам нужно найти рабочую группу и имя пользователя.


Права доступа рабочей группы работают так же, как Windows Разрешения домена, но они не совпадают предмет. Это совершенно отдельная система, разработанная до того, как Windows имела какую-либо форму безопасности, аутентификации или разрешений. Список пользователей хранится в таблице в базе данных безопасности (по умолчанию system.mdw). Список групп находится в таблице в той же базе данных / файле. Список пользователей в каждой группе находится в одной базе данных / файле. И значения идентификаторов, связанных с каждым пользователем и группой в одном файле.

Просматривая скрытые системные таблицы базы данных Access / Jet, вы можете увидеть значения идентификаторов, связанные с разрешениями для таблиц и других объектов. , Чтобы сопоставить эти значения идентификаторов с именами, группами и паролями, у вас должна быть соответствующая база данных безопасности.

...