Я создал пользователя с именем «test» (стандартный пользователь) и вошел в систему под этим пользователем в Windows. У меня есть приложение, которое создает базу данных Achieve and Backup of Sql Server. Когда я вхожу в Windows с учетной записью администратора, приложение работает нормально, создавая резервную копию и архив. Но при входе в систему под тестовым пользователем (обычный пользователь) выдается сообщение об ошибке
Ошибка резервного копирования для сервера localhost/PharmSpec
(Я тестирую его на виртуальной машине, поэтому не могу выполнить отладку. На моем локальном компьютере я не могу войти в систему под обычным пользователем, поскольку это запрещено некоторой политикой домена, поэтому невозможно выполнить отладку.) Должен ли я включить какую-нибудь групповую политику или сделать что-то в реестре? Пожалуйста, помогите.
Вот код для нажатия кнопки «Резервное копирование при резервном копировании». Пока ExecuteBackup не работает нормально, я вижу, как создается каталог.,
private void BackupNow_But_Click(object sender, System.EventArgs e)
{
StreamWriter Writer = null;
try
{
// Setting folder location.
m_strBackupFolder = BackupFolder_Txt.Text;
DirectoryInfo Dir = new DirectoryInfo(m_strBackupFolder);
if (Dir.Exists == false)
{
Dir.Create();
}
string strLocation = m_strBackupFolder + "\\ImmediateBackup.log";
FileInfo File = new FileInfo(strLocation);
Writer = File.CreateText();
StringWriter strWriter = new StringWriter();
strWriter.Write(DateTime.Now + "::");
Dir = new DirectoryInfo(m_strBackupFolder);
if (true == Dir.Exists)
{
//Perfor the backup
BACKUP_MODE_ENUM enumBackupMode = BACKUP_MODE_ENUM.BACKUP_FULL;
string szMsg = m_DBResMgr.GetString("BackupFullComplete");
//Quick option selected
if (Quick_Opt.Checked)
{
enumBackupMode = BACKUP_MODE_ENUM.BACKUP_QUICK;
szMsg = m_DBResMgr.GetString("BackupQuickComplete");
}
ExecuteBackup(enumBackupMode, m_strBackupFolder);
MessageBox.Show(this, szMsg, m_DBResMgr.GetString("backupcompletecap"), MessageBoxButtons.OK, MessageBoxIcon.Information);
// Log Activity.
string strBkup = m_DBResMgr.GetString("BkUpString");
string strBkupF = m_DBResMgr.GetString("BkUpStringFull");
string strBkupF1 = m_DBResMgr.GetString("BkUpStringFull1");
string strBkupF2 = m_DBResMgr.GetString("BkUpStringFull2");
if (true == Quick_Opt.Checked)
{
LogActivity(Services.ServicesConst.ACTIVITy_LOG_ENUM.BACKUP, strBkupF, "", "");
strWriter.Write("Backup::" + m_DBResMgr.GetString("BkUpStringFull"));
}
else if (true == Full_Opt.Checked)
{
LogActivity(Services.ServicesConst.ACTIVITy_LOG_ENUM.BACKUP, strBkupF1, "", "");
strWriter.Write("Backup::" + m_DBResMgr.GetString("BkUpStringFull"));
}
else
LogActivity(Services.ServicesConst.ACTIVITy_LOG_ENUM.BACKUP, strBkupF2, "", "");
}
else
{
// Showing error on invalid backup location.
MessageBox.Show(m_DBResMgr.GetString("InvalidBackupLocation"), m_DBResMgr.GetString("Error"),
MessageBoxButtons.OK, MessageBoxIcon.Error);
BackupNow_But.Enabled = false;
Schedule_But.Enabled = false;
}
Writer.WriteLine(strWriter.ToString());
strWriter.Close();
Writer.Close();
}
catch (UnauthorizedAccessException)
{
MessageBox.Show(this, m_DBResMgr.GetString("NoPermission"), m_DBResMgr.GetString("NoPermCaption"),
MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
catch (IOException)
{
MessageBox.Show(this, m_DBResMgr.GetString("NoPermission"), m_DBResMgr.GetString("NoPermCaption"),
MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
catch (Exception Exc)
{
if (0 < Exc.Message.IndexOf("path"))
{
MessageBox.Show(m_DBResMgr.GetString("InvalidBackupLocation"), m_DBResMgr.GetString("Error"),
MessageBoxButtons.OK, MessageBoxIcon.Error);
BackupNow_But.Enabled = false;
Schedule_But.Enabled = false;
return;
}
else
// Shows error.
MessageBox.Show(Exc.Message, m_ResMngr.GetString("Error"), MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
if (Writer != null)
Writer.Close();
}
}
Вот метод ExecuteBackup.
private void ExecuteBackup(BACKUP_MODE_ENUM enumBackupMode, string szLocation)
{
try
{
// Write open database
if (false == szLocation.EndsWith("\\"))
{
szLocation = szLocation + "\\";
}
Server sv = new Server(m_dbServer);
BackupDeviceItem bdi;
Backup bk = new Backup();
string szFilename = DB_NAME + "_" + DateTime.Now.ToString("dd-MMM-yyyy-HH-mm-ss-fff", CultureInfo.InvariantCulture);
//Setup the backup options
if (enumBackupMode == BACKUP_MODE_ENUM.BACKUP_FULL)
{
szFilename += "_Full.Fbk";
bk.BackupSetDescription = "PharmSpecDB Full Backup";
bk.BackupSetName = DB_NAME + " Backup";
bk.LogTruncation = BackupTruncateLogType.Truncate;
bk.Incremental = false;
}
else if (enumBackupMode == BACKUP_MODE_ENUM.BACKUP_QUICK)
{
szFilename += "_Quick.Qbk";
bk.BackupSetDescription = "PharmSpecDB Quick Backup";
bk.BackupSetName = DB_NAME + " Backup";
bk.LogTruncation = BackupTruncateLogType.Truncate;
bk.Incremental = true;
}
else if (enumBackupMode == BACKUP_MODE_ENUM.ARCHIVE)
{
szFilename += "_Arc.Abk";
bk.BackupSetDescription = "PharmSpecDB Archive";
bk.BackupSetName = DB_NAME + " Archive";
bk.CopyOnly = true;
bk.LogTruncation = BackupTruncateLogType.NoTruncate;
bk.Incremental = false;
}
else
{
szFilename += ".bak";
bk.BackupSetDescription = "PharmSpecDB Backup";
bk.BackupSetName = DB_NAME + " Backup";
bk.LogTruncation = BackupTruncateLogType.Truncate;
bk.Incremental = false;
}
bdi = new BackupDeviceItem(szLocation + szFilename, DeviceType.File);
bk.Devices.Add(bdi);
bk.Action = BackupActionType.Database;
bk.Database = DB_NAME;
bk.RetainDays = 365;
//Perform the backup
bk.SqlBackup(sv);
}
catch (Exception Exc)
{
throw Exc;
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... ndard-user
Резервное копирование и архивирование базы данных не выполняются для обычного пользователя. ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Что блокирует мой файл базы данных и не позволяет мне выполнить резервное копирование?
Anonymous » » в форуме C# - 0 Ответы
- 74 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Что в моем коде блокирует файл базы данных, не позволяя мне выполнить резервное копирование?
Anonymous » » в форуме C# - 0 Ответы
- 55 Просмотры
-
Последнее сообщение Anonymous
-