首页 文章

sqlite附加密码保护的数据库

提问于
浏览
0

如何将受密码保护的sqlite数据库附加到非密码保护的数据库?

我有一个没有密码保护的用户sqlite数据库 . 我正在尝试附加受密码保护的只读资源数据库 .

我可以改变他们的角色并首先打开密码保护并附加用户数据库,但我认为它应该这样工作?

我没有尝试太多的东西,所以没有代码可以分享 . 但我用Google搜索,似乎无法在文档或任何示例中找到任何提及 . 这一切都是关于直接打开受密码保护的数据库 .

编辑: - 继承人我尝试过...使用https://www.sqlite.org/lang_attach.html https://www.sqlite.org/c3ref/open.html

private void btnPasswordAttach_Click(object sender, EventArgs e)
    {
        string pathToUnProtected = @"C:\Users\BoB\Downloads\DBs\Test Users #1.astc";
        string connectionstring = string.Format("Data Source={0};Version=3;BinaryGUID=false", pathToUnProtected);
        SQLiteConnection connection = new SQLiteConnection(connectionstring);
        connection.Open();
        TestQueryMain(connection); **//WORKS**

        pathToUnProtected = @"C:\Users\BoB\Downloads\DBs\Test Mods #1.aste";
        string commandTextUnProtected = string.Format("ATTACH DATABASE '{0}' AS mods", pathToUnProtected);
        SQLiteCommand attachCommandUnProtected = new SQLiteCommand(commandTextUnProtected, connection);
        attachCommandUnProtected.ExecuteNonQuery();
        TestQueryUnProtected(connection); **//WORKS**

        //string pathToProtected = @"C:\Users\BoB\Downloads\DBs\VanillaResources.sqlite";
        //string pathToProtected = @"C:\Users\BoB\Downloads\DBs\VanillaResources.sqlite?password=VanillaIceCream";
        //string pathToProtected = @"file:C:\Users\BoB\Downloads\DBs\VanillaResources.sqlite?password=VanillaIceCream";
        string pathToProtected = @"C:\Users\BoB\Downloads\DBs\VanillaResources.sqlite;password=VanillaIceCream;";
        string password = "VanillaIceCream";

        string commandText = string.Format("ATTACH DATABASE '{0}' AS vanilla", pathToProtected);
        SQLiteCommand attachCommandProtected = new SQLiteCommand(commandText, connection);
        attachCommandProtected.ExecuteNonQuery();
        TestQueryProtected(connection); **//NO SUCH TABLE...**
    }


private void TestQueryMain(SQLiteConnection connection)
    {
        string sql = "Select * FROM Notes";
        SQLiteCommand command = new SQLiteCommand(sql, connection);
        command.ExecuteReader();
    }

    private void TestQueryProtected(SQLiteConnection connection)
    {
        try
        {
            string sql = "SELECT Version from vanilla.DatabaseVersion";
            SQLiteCommand command = new SQLiteCommand(sql, connection);

            using (SQLiteDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    string i = reader["Version"].ToString();
                    Debug.Assert(true);
                }
            }
        }
        catch (Exception ex)
        {
            Debug.Assert(true);
        }
    }

    private void TestQueryUnProtected(SQLiteConnection connection)
    {
        try
        {
            string sql = "SELECT Version from mods.DatabaseVersion";
            SQLiteCommand command = new SQLiteCommand(sql, connection);

            using (SQLiteDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    string i = reader["Version"].ToString();
                    Debug.Assert(true);
                }
            }
        }
        catch (Exception ex)
        {
            Debug.Assert(true);
        }
    }

1 回答

  • 1

    在另一篇文章中找到答案:https://stackoverflow.com/a/1385690/10099912

    要附加受密码保护的sqlite数据库,您需要使用'key'word:

    “ATTACH DATABASE'C:\ test.sqlite'AS attachedDb KEY'password'”

相关问题