Как я могу управлять доступом к базе данных в приложении WPF windows?
Всем привет,
Мне нужен совет . Я создал приложение WPF для windows. А база данных-это SQLite DB. После установки затем БД была расположена по этому пути
@"C:\Program Files (x86)\customercompanyname\appname\mydb.s3db"; затем попытка открыть приложение на каком-либо другом локальном компьютере, если произошла ошибка, если на компьютере установлены права администратора. Поэтому я изменил путь доступа к БД с помощью кода c#, как показано ниже.
Что я уже пробовал:
string path = "C" + ":\\MyDBFolder"; if (!Directory.Exists(path)) { string sourceDirectory = @"C:\Program Files (x86)\customercompanyname\appname\mydb.s3db"; string targetDirectory = path + "\\mydb.s3db"; File.Copy(sourceDirectory, targetDirectory, true); }
После этого теперь приложения работают нормально на каждой локальной машине. Но проблема в том, что клиент требует меня, они хотят установить, как никто не может показать или получить доступ (например, удалить, переместить папку и т. д.) к папке БД. Только приложения могут получить к нему доступ. Поэтому, пожалуйста, посоветуйте мне,как я могу решить эту проблему?
NotPolitcallyCorrect
Почему вы изначально жестко кодируете пути в своем приложении?
Member 12955507
@NotPolitcallyCorrect : я копирую путь внутри App.xaml.cs
Richard Deeming
Если пользователь, запускающий ваше приложение, не имеет доступа к изменению файла, то ваше приложение не имеет доступа к изменению файла.
И наоборот, если ваше приложение имеет доступ к изменению файла, то пользователь имеет доступ к изменению файла.
С локальной файловой базой данных лучшее, что вы можете сделать, это "спрятать" файл в папке, которую пользователь, вероятно, не увидит - например, в папке конкретного приложения под C:\ProgramData\
папка. Однако это не помешает им изменить его, если им удастся найти файл.
Чтобы правильно защитить базу данных, вам нужно будет использовать реальный сервер баз данных, такой как SQL Server.
Member 12955507
@Richard Deeming, теперь я прячу папку по этому пути @"C:\MyDBFolder с помощью базы данных sqlite. Вы советуете мне, я должен держать БД внутри programdata\MyDBFolder\DB в скрытом формате. Разве я не прав?