【问题标题】:creating a password protected Access database创建受密码保护的 Access 数据库
【发布时间】:2010-07-30 15:42:06
【问题描述】:

将 Visual Studio 2010 与 C# WPF 项目结合使用。我知道如何使用 ADOX 命名空间创建 Access 2000-2003 db 文件。

ADOX.CatalogClass cat = new CatalogClass();
string str = "provider=Microsoft.Jet.OleDb.4.0;Data Source=" + _dbPath + ";";
cat.Create(str);
cat = null;

连接并打开数据库:

conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" 
       + _dbPath + ";");

//connect to it with a password
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + _dbPath + ";User Id=admin;Password=myPassword;"

我要创建受密码保护的文件:

ADOX.CatalogClass cat = new CatalogClass();
string str = "provider=Microsoft.Jet.OleDb.4.0;Data Source=" 
+ _dbPath + ";Password=myPassword;";
cat.Create(str);
cat = null;

这会在运行时产生错误:

无法启动您的应用程序。工作组信息文件丢失或被其他用户独占打开。

无密码创建时,数据库创建成功。

如何使用此策略创建受密码保护的 Access 数据库?

【问题讨论】:

  • 数据库密码不是安全的,而是“安全剧场”——它们对于任何实际目的都没有用,应该避免。
  • 剧院很有用。 Access 数据库密码是让您在篡改之前进行思考的好方法。
  • 我不同意一个例外。如果您使用 MDB/ACCDB 只是通过电子邮件或其他方法向某人发送数据,则 db 密码比 zip 文件密码更好、更强大。但是在多个用户共享后端数据文件的生产应用程序中,使用数据库密码简直是愚蠢的。

标签: c# ms-access


【解决方案1】:

如果您指的是数据库密码,而不是需要工作组文件的用户级安全性,您可以将连接字符串更改为包括:

 Jet OLEDB:Database Password=MyDbPassword;

即:

ADOX.Catalog cat = new CatalogClass();
string str = "provider=Microsoft.Jet.OleDb.4.0;Data Source=" 
+ _dbPath + ";Jet OLEDB:Database Password=MyDbPassword;";
cat.Create(str);
cat = null;

-- http://www.connectionstrings.com/access

使用这里的信息:http://support.microsoft.com/kb/317881,有一些小的改动:

ADOX._Catalog cat = new ADOX.Catalog();

cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=PW;" +
       "Data Source=C:\\Docs\\NewMDB.mdb;");

我发现我可以创建一个受密码保护的 Access 数据库。

【讨论】:

  • 这是用于连接数据库的,它对创建不起作用!我收到此错误消息,通知我数据库是由另一个用户独占打开的,或者我需要权限才能查看其数据。但是数据库还没有创建!!
  • 我以前试过这个,Remou。但是失败了!!我想我会加密数据库中的所有内容,或者看看如何使用这些资源......
【解决方案2】:

不是 ADOX(64 位问题)...但您可能会发现这种略有不同的方法很有用。

...
...
using Access = Microsoft.Office.Interop.Access;
using System.Data.OleDb;
...
...

string AccessDB = "C:\users\you\desktop\yourdb.accdb";

oAccess = new Access.Application();
oAccess.NewCurrentDatabase(AccessDB);
oAccess.Quit();

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+AccessDB+".accdb;Mode=12");
con.Open();
// NOTE THE "", '', `` -- that matters 
// NOTE NEW PWD is first THE OLD PWD last
new OleDbCommand(@"ALTER DATABASE PASSWORD `XXxx11` ``", con).ExecuteNonQuery();
con.Close();
con.Dispose();

...
...
// OPEN Later ... and do something
con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + AccessDB + ".accdb;Mode=12;Jet OLEDB:Database Password=XXxx11");
con.Open();
new OleDbCommand(@"CREATE TABLE XYZ ('ID' Number)", con).ExecuteNonQuery();
con.Close();
con.Dispose();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    相关资源
    最近更新 更多