【问题标题】:Programmatically change user permissions for table Access database以编程方式更改表 Access 数据库的用户权限
【发布时间】: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 中所述

标签: c# database ms-access


【解决方案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 命令也可以工作。

【讨论】:

    猜你喜欢
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多