以编程方式更改表 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 数据库的用户权限的主要内容,如果未能解决你的问题,请参考以下文章