以编程方式更改表 Access 数据库的用户权限

Posted

技术标签:

【中文标题】以编程方式更改表 Access 数据库的用户权限【英文标题】:Programmatically change user permissions for table Access database 【发布时间】:2016-02-24 18:22:21 【问题描述】:

有没有办法使用 C# 更改 Access 数据库中表的用户权限?我在读取和插入表时遇到问题,该表拒绝了当前用户的读取/插入权限。当我手动更改权限时,我想通过 C# 以编程方式更改它。我已经尝试过这个 SQL 命令:

GRANT SELECT ON TABLE myTable TO Admin

但我似乎无权执行该操作。这是它在 Access 中的外观。

编辑:

为了调用@rybo103 方法,我使用了这段代码,但是我得到了一个错误。

DAO.DBEngine engine = new DAO.DBEngine();
string path = @"C:\Database.mdb";
DAO.Database db = engine.OpenDatabase(path, false, false, "");
List<DAO.PermissionEnum> flags = new List<PermissionEnum>();
flags.Add(DAO.PermissionEnum.dbSecFullAccess);
AddPermissions(db, "ECR", "Admins", flags);

错误:

Cannot open the Microsoft Office Access database engine workgroup information file.

【问题讨论】:

像这样没有TABLE 也能工作吗? -> GRANT SELECT ON myTable TO Admin @HansUp 我有一个异常运行这个命令:Cannot open the Microsoft Jet engine workgroup information file. 请告诉我们您在哪里遇到了该错误。你知道什么是 Access 工作组信息文件吗?你知道如何找到你的吗?你知道如何在你的 OleDb 连接字符串中引用它吗? 我在@rybo103 代码中的document.UserName = groupName; 行遇到了这个错误。我只知道基本的 Access 工作组信息文件。是的,我可以找到我的。我对这个参考一无所知。 我认为从 OleDb 连接执行 GRANT 语句应该更简单。在连接字符串中,使用Jet OLEDB:System Database 属性引用您的工作组信息文件,如Access connection strings 中所述 【参考方案1】:

在 Access 中,您将需要使用 DAO 来进行此类架构更改。

https://msdn.microsoft.com/en-us/library/office/ff835373.aspx

void AddPermissions(DAO.Database db, string tableName, string groupName, IList<DAO.PermissionEnum> addFlags)

    var container = db.DaoDB.Containers["Tables"];
    var document = container.Documents[tableName];
    document.UserName = groupName;

    int permissions = document.Permissions;
    foreach (var flag in addFlags)
    
        permissions = permissions | (int)flag;
    

    document.Permissions = permissions;

【讨论】:

首先,非常感谢您的回答。我在打开数据库时遇到问题,出现错误:无法打开 Microsoft Office Access 数据库引擎工作组信息文件。你能帮我解决这个问题吗?【参考方案2】:

@HansUp sugestons 提供了帮助。最后,我在我的 OleDb 连接字符串中添加了 Jet OLEDB:System Database 属性,它可以工作。即使没有GRANT 命令也可以工作。

【讨论】:

以上是关于以编程方式更改表 Access 数据库的用户权限的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式更改 Access 中的选项?

MS-Access 2007 - 如何在点击事件中以编程方式访问子表单列数据

它已经被别的用户以独占方式打开,或没有查看数据的权限。

如何以编程方式更改用户权限?

如何以编程方式将 Excel 数据导入 Access 表?

vb不能打开数据库,总是提示“已经被别的用户以独占方式打开,或么有查看数据的权限”