পাসওয়ার্ড একটি এসকিউএলডি ডিবি সুরক্ষিত করে। এটা কি সম্ভব?


88

আমাকে একটি নতুন ছোট প্রকল্পের মুখোমুখি হতে হবে। এটিতে প্রায় 7 বা 9 টি টেবিল থাকবে, এর মধ্যে সবচেয়ে বড় মাসে 1000 সারি সর্বাধিক হারে বৃদ্ধি পাবে।

আমি এসকিউএলাইটকে আমার ডিবি হিসাবে ভেবেছিলাম ... তবে কেউ যদি ডিবি থেকে ডেটা পরিবর্তন করতে চায় তবে আমার ডিবি রক্ষা করতে হবে

আমার প্রধান প্রশ্নটি হ'ল:

আপনি অ্যাক্সেস করার মতো পাসওয়ার্ড কি কোনও স্ক্লাইট ডিবি রক্ষা করা সম্ভব?

এত ছোট সমাধানের জন্য আর কোন আরডিবিএমএস কী প্রস্তাব করবেন?

বিকাশটি সি # তে হবে তবে আমি নিখরচায় কিছু অনুসন্ধান করছি।




আপনার যদি ডিবাগিংয়ের জন্য ঘন ঘন ডিবি লক / আনলক করা দরকার হয় তবে এই সরঞ্জামটি goo.gl/12VnQd
মঙ্গেশ


উত্তর:


72

আপনি পাসওয়ার্ডটি একটি এসকিউএল 3 ডিবি সুরক্ষিত করতে পারেন। কোনও ক্রিয়াকলাপ করার আগে, পাসওয়ার্ডটি নীচের মত সেট করুন।

SQLiteConnection conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;");
conn.SetPassword("password");
conn.Open();

তারপরে পরবর্তী সময় আপনি এটির মতো অ্যাক্সেস করতে পারবেন

conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;Password=password;");
conn.Open();

এটি কোনও জিইআইআই সম্পাদককে আপনার ডেটা দেখার অনুমতি দেবে না। আপনি যদি পাসওয়ার্ড সরবরাহ করেন তবে কিছু সম্পাদক ডিবি ডিক্রিপ্ট করতে পারবেন। ব্যবহৃত অ্যালগরিদম হ'ল আরএসএ।

পরে আপনি যদি পাসওয়ার্ড পরিবর্তন করতে চান তবে ব্যবহার করুন

conn.ChangePassword("new_password");

পাসওয়ার্ড পুনরায় সেট করতে বা অপসারণ করতে, ব্যবহার করুন

conn.ChangePassword(String.Empty);

আমি এখনও অবধি খুঁজে পেয়েছি যে বিনামূল্যে পাসওয়ার্ড সুরক্ষিত ডাটাবেস খুলতে হবে এই উত্তরটি বিস্তারিত SQLite2009 প্রো হয়
জাম্পিংজেজা

কোন ল্যাং এই উদাহরণ? NET?
পিম

4
প্রযুক্তিগতভাবে, .NET একটি কাঠামো। সি # এখানে ভাষা প্রদর্শিত হচ্ছে displayed
vapcguy

: উপরন্তু, আপনি সংযোগ স্ট্রিং পূর্বে পরবর্তী খোলার প্রতিটি সময় আপনি পাসওয়ার্ড পরিবর্তন করতে বা আপনি ত্রুটি সম্মুখীন আপ শেষ করতে পারেন আপডেট সঙ্গে সতর্ক হতে হবে stackoverflow.com/questions/16030601/...
vapcguy

মন্তব্য করুন যে কোনও পাসওয়ার্ড সরবরাহ না করে, ওপেন () কোনও পাসওয়ার্ড-সুরক্ষিত এসকিউএলাইট ডাটাবেসে ব্যর্থ হবে না, যেমনটি আপনি প্রত্যাশা করেছিলেন! ব্যর্থতা হ'ল সেই খোলা ফাইলটিতে পরবর্তী কোনও ডেটা বা মেটাডেটা অপারেশন।
ক্রিস্টি এস

33

আপনি স্ক্লাইট। নেট সরবরাহকারী (সিস্টেম.ডাটা.এসকিউএলাইট) এর অন্তর্নির্মিত এনক্রিপশন ব্যবহার করতে পারেন। Http://web.archive.org/web/20070813071554/http://sqlite.phxsoftware.com/forums/t/130.aspx এ আরও বিশদ দেখুন

একটি বিদ্যমান এনক্রিপ্ট করা ডাটাবেস এনক্রিপ্ট করতে , বা একটি এনক্রিপ্ট করা ডাটাবেসের পাসওয়ার্ড পরিবর্তন করতে , ডাটাবেসটি খুলুন এবং তারপরে SQLiteConnication এর চেঞ্জপ্যাসওয়ার্ড () ফাংশনটি ব্যবহার করুন:

// Opens an unencrypted database
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3");
cnn.Open();
// Encrypts the database. The connection remains valid and usable afterwards.
cnn.ChangePassword("mypassword");

একটি বিদ্যমান পাসওয়ার্ড বা পাসওয়ার্ড ChangePassword()সহ এনক্রিপ্ট করা ডাটাবেস কল ডিক্রিপ্ট করতে :NULL""

// Opens an encrypted database
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3;Password=mypassword");
cnn.Open();
// Removes the encryption on an encrypted database.
cnn.ChangePassword(null);

একটি বিদ্যমান এনক্রিপ্টড ডাটাবেস খুলতে, বা একটি নতুন এনক্রিপ্ট করা ডাটাবেস তৈরি করতে, ConnectionStringপূর্ববর্তী উদাহরণে প্রদর্শিত হিসাবে একটি পাসওয়ার্ড নির্দিষ্ট করুন , বা SetPassword()একটি নতুন খোলার আগে ফাংশনটি কল করুন SQLiteConnectionConnectionStringঅবশ্যই নির্দিষ্ট করা পাসওয়ার্ড অবশ্যই ক্লিয়ারটেক্সট SetPassword()হতে হবে তবে ফাংশনে সরবরাহ করা পাসওয়ার্ডগুলি বাইনারি বাইট অ্যারে হতে পারে।

// Opens an encrypted database by calling SetPassword()
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3");
cnn.SetPassword(new byte[] { 0xFF, 0xEE, 0xDD, 0x10, 0x20, 0x30 });
cnn.Open();
// The connection is now usable

ডিফল্টরূপে, বিদ্যমান সংযোগে অন্য একটি ডাটাবেস ফাইল সংযুক্ত করার সময় এটিটক কীওয়ার্ড মূল ডাটাবেসের মতো একই এনক্রিপশন কীটি ব্যবহার করবে। এই আচরণটি পরিবর্তন করতে, আপনি নিম্নলিখিত হিসাবে KEY সংশোধক ব্যবহার করুন:

আপনি যদি ক্লিয়ারটেক্সট পাসওয়ার্ড ব্যবহার করে কোনও এনক্রিপ্ট করা ডাটাবেস সংযুক্ত করছেন:

// Attach to a database using a different key than the main database
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3");
cnn.Open();
cmd = new SQLiteCommand("ATTACH DATABASE 'c:\\pwd.db3' AS [Protected] KEY 'mypassword'", cnn);
cmd.ExecuteNonQuery();

বাইনারি পাসওয়ার্ড ব্যবহার করে একটি এনক্রিপ্ট করা ডাটাবেস সংযুক্ত করতে:

// Attach to a database encrypted with a binary key
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3");
cnn.Open();
cmd = new SQLiteCommand("ATTACH DATABASE 'c:\\pwd.db3' AS [Protected] KEY X'FFEEDD102030'", cnn);
cmd.ExecuteNonQuery();

4
এই লিঙ্ক-কেবল-উত্তরটি আসলে একটি স্পষ্ট উদাহরণ যা আমরা এসও-তে কেবল লিঙ্ক-উত্তরগুলি করি না। আসল লিঙ্কটি চলে গেছে; এর আর অস্তিত্ব নেই। কেবলমাত্র সাইটটি আমরা দেখতে পাচ্ছি তা হ'ল এটি স্বয়ংক্রিয়ভাবে ওয়েব.আরচাইভ.আর্গ. দ্বারা সংরক্ষণাগারভুক্ত হয়েছিল।
হ্যানলেট ইস্কো

এটি আর কাজ করে না, সর্বশেষ সংস্করণগুলিতে এই জাতীয় কোনও ফাংশন পাওয়া যায় নি।
MindRoasterMir

12

এসকিউএলসিফার ব্যবহার করুন, এটি এসকিউএলটির জন্য একটি ওপেনসোর্স এক্সটেনশন যা ডেটাবেস ফাইলগুলির স্বচ্ছ 256-বিট এইএস এনক্রিপশন সরবরাহ করে। http://sqlcipher.net


4
গতি কেমন? আমি যদি স্ক্লাইসিফার ব্যবহার করি তবে এটি কী কার্যকারিতা হ্রাস পাবে?
টমসোয়ায়ার

6

আপনি আপনার এসকিউএল ডাটাবেসটি এসই অ্যাডনের সাথে এনক্রিপ্ট করতে পারেন। এইভাবে আপনি অননুমোদিত অ্যাক্সেস / পরিবর্তন রোধ করেন।

এসকিউএল ডকুমেন্টেশন উদ্ধৃত:

এসকিউএলাইট এনক্রিপশন এক্সটেনশন (এসইই) এসকিউএলাইটের একটি বর্ধিত সংস্করণ যা অননুমোদিত অ্যাক্সেস বা পরিবর্তন রোধ করতে সহায়তা করতে 128-বিট বা 256-বিট এইএস ব্যবহার করে ডাটাবেস ফাইলগুলি এনক্রিপ্ট করে। পুরো ডাটাবেস ফাইলটি এনক্রিপ্ট করা হয়েছে যাতে কোনও বাইরের পর্যবেক্ষকের কাছে, ডাটাবেস ফাইলটিতে সাদা শব্দ রয়েছে বলে মনে হয়। এমন কোনও কিছুই নেই যা ফাইলটি এসকিউএল ডাটাবেস হিসাবে চিহ্নিত করে।

আপনি এই লিঙ্কটিতে এই অ্যাডন সম্পর্কে আরও তথ্য পেতে পারেন ।


7
সেই এক্সটেনশনটি স্ক্লাইটে প্রদত্ত অ্যাডোন।
জন বোকার

3

একটি বিকল্প ভিস্তাডিবি হবে । তারা ডাটাবেসগুলিকে (বা এমনকি টেবিলগুলি) পাসওয়ার্ড সুরক্ষিত (এবং বিকল্পভাবে এনক্রিপ্ট করা) করার অনুমতি দেয়।


4
আরও কার্যকর এবং বিনামূল্যে উপায় আছে!
সাওয়ান

4
@ এমএসএস তবে - যেমনটি আমি বলেছি, ভিস্তাডিবি সলিউশনের কিছু সুবিধা রয়েছে, পুরো ডিবি সংযোগ এনক্রিপশনের পরিবর্তে টেবিল স্তরে পৃথক এনক্রিপশন সহ। আমি জানি না যে কোনও নেট। নেটিভ বিকল্প যা এটি সম্পাদন করে। এটি বেশিরভাগ অন্যান্য বিকল্পের মতো নয়, খাঁটি ব্যবস্থাপনিত - এটি নিখরচায় থাকার অর্থ এই নয় যে আরও কার্যকর বা আরও ভাল বিকল্প রয়েছে - এটি সম্পূর্ণরূপে ব্যবহারের প্রয়োজনীয়তার উপর নির্ভর করে।
রিড কোপসি

3

আপনি যদি ফ্লুয়েটএন হাইবারনেট ব্যবহার করেন তবে আপনি নিম্নলিখিত কনফিগারেশন কোডটি ব্যবহার করতে পারেন:

private ISessionFactory createSessionFactory()
{
    return Fluently.Configure()
            .Database(SQLiteConfiguration.Standard.UsingFileWithPassword(filename, password))
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<DBManager>())
            .ExposeConfiguration(this.buildSchema)
            .BuildSessionFactory();    
}

private void buildSchema(Configuration config)
{
        if (filename_not_exists == true)
        {
            new SchemaExport(config).Create(false, true);
        }
}    

ফাইলওয়াইথপ্যাসওয়ার্ড ব্যবহারের পদ্ধতি (ফাইলের নাম, পাসওয়ার্ড) একটি ডাটাবেস ফাইল এনক্রিপ্ট করে এবং পাসওয়ার্ড সেট করে।
এটি কেবলমাত্র নতুন ডাটাবেস ফাইল তৈরি হওয়ার পরে চলে। এই পদ্ধতিটি খুললে পুরানো একটি এনক্রিপ্ট করা যায় না।


2

আমি জানি এটি একটি পুরানো প্রশ্ন তবে সহজ সমাধানটি কেবল ওএস স্তরে ফাইলটি রক্ষা করা হবে না? ব্যবহারকারীদের কেবল ফাইল অ্যাক্সেস করা থেকে বিরত করুন এবং তারপরে তারা এটি স্পর্শ করতে সক্ষম হবে না। এটি কেবল অনুমান এবং আমি নিশ্চিত নই যে এটি একটি আদর্শ সমাধান কিনা।


4
আমি নিশ্চিত না যে এটি একটি ভাল সমাধান কিনা কারণ ইউএসবি স্টিক সহ যে কেউই অন্য কোনও ওএসে বুট করতে এবং ফাইলগুলি পড়তে পারে।
নুরেটিন

আমি মনে করি এটি ন্যায্য পয়েন্ট আউট, তবে তারপরে সেই ক্ষেত্রে ইউএসবি অক্ষম করুন। কারও কারও কাছে যদি আপনার মেশিনে শারীরিক অ্যাক্সেস থাকে তবে অনেকগুলি অন্যান্য কাজ করা যায়।
ডেভিড দাম

আপনি সংবেদনশীল ডেটা সুরক্ষিত করতে চান যাতে কেবল এই সমস্ত জিনিসই ভুল হয়ে যায়।
ট্রিপলি

এসকিউএল ডাটাবেসের সাহায্যে এটি আসলে মোটেই সম্ভব নয়। আপনার ব্যবহারকারীদের এটি পড়তে এবং এটি উভয়ই লিখতে সক্ষম হতে হবে, যার অর্থ এসকিউএলাইট ডিবি যেখানে থাকে সেই ফোল্ডারের এসিএল তাদেরও সেই অনুমতিগুলি মঞ্জুর করে। প্রকৃত ব্যবহারকারীদের কেবলমাত্র সেই ফোল্ডারে অনুমতি দেওয়ার মাধ্যমে আপনি এটি অ ব্যবহারকারীদের বিরুদ্ধে সুরক্ষিত করতে পারেন, তবে আপনার কাছে এখনও "অন্তর্নিহিত হুমকি" রয়েছে।
vapcguy

1

আপনার ডাটাবেসটি কেন এনক্রিপ্ট করতে হবে? ব্যবহারকারী সহজেই আপনার প্রোগ্রামকে বিচ্ছিন্ন করতে এবং কীটি বের করতে পারে। যদি আপনি এটি নেটওয়ার্ক ট্রান্সফারের জন্য এনক্রিপ্ট করে থাকেন তবে কোনও ডাটাবেস স্তরে কোনও এনক্রিপশন স্তরটি চেঁচানোর পরিবর্তে পিজিপি ব্যবহার বিবেচনা করুন।


6
ব্যবহারকারীকে শুরুতে পাসওয়ার্ডের জন্য জিজ্ঞাসা করা যেতে পারে তাই প্রোগ্রামটি বিযুক্ত করে কোনও কী অর্জন করা সম্ভব হবে না।
কেগ্রাডেক

4
রেডগেট রিফ্লেক্টর বা আইএলএসপি ব্যবহার করুন।
জেভ স্পিটজ

4
আপনি প্রোগ্রামে চাবি রাখবেন কেন? আপনি এটি করবেন না, ব্যবহারকারীর পাসওয়ার্ড থেকে একটি কী তৈরি করুন এবং এটি ব্যবহার করুন, তবে আপনার সোর্স কোডে কোনও গোপনীয়তার দরকার নেই।
ট্রাম্পস্টার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.