用户没有RESTORE数据库的权限

时间:2017-06-05 15:44:06

标签: sql-server delphi ado

我使用以下代码在我的本地SqlExpress数据库上备份数据库。

  procedure RestoreScoreDb(DBName,OldName,BackName : String);
    var
    cmd : WideString;
    SqlBackupDir : String;
    SqlDataDir : String;
    begin
    Try
    ConnectionMaster.Connected := False;
    ConnectionMaster.Close;
    ConnectionMaster.ConnectionString := 'Provider=SQLNCLI11.1;Integrated      Security="";Persist Security Info=False;User ID=SA;Password=Tccc1234;OLE DB Services=-2;Initial Catalog="master";Data Source=\SQLEXPRESS;Initial File Name="";Packet Size=4096;Auto Translate=True;Server SPN=""';
    SqlBackupDir := ReadIniStr(IniCfg,'Dir','SqlBackup');
    SqlDataDir := ReadIniStr(IniCfg,'Dir','SqlData');
    cmd := 'RESTORE DATABASE '+DBName;
    cmd := Cmd + ' FROM DISK = N'''+SqlBackupDir+'\'+BackName+'''';
    cmd := Cmd + ' WITH FILE = 1';
    cmd := cmd + ' , MOVE N'''+OldName+''' TO N'''+SqlDataDir+'\'+DBName+'.mdf''';
    cmd := cmd + ' , MOVE N'''+OldName+'_log'' TO N'''+SqlDataDir+'\'+DBName+'.ldf''';
    cmd := cmd + ' , NOUNLOAD, REPLACE, STATS = 10';
    CmdRestore.CommandText := cmd;
    CmdRestore.Connection := ConnectionMaster;
    CmdRestore.Execute;
    except
    on E: Exception do
    writeln(LogFile,'RestoreScoreDb = '+E.Message);
    end;
  end;

恢复命令是

cmd ='RESTORE DATABASE score_import FROM DISK = 
N''C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\Backup\score_import.bak'' 
WITH FILE = 1 , MOVE N''score_import'' TO 
N''C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\score_import.mdf'' , 
MOVE N''score_import_log'' TO N''C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\score_import.ldf'' , 
NOUNLOAD, REPLACE, STATS = 10'

当我复制并粘贴到管理工作室时,它可以毫无困难地恢复表格。但是当我运行这段代码时,我得到一个错误:

  

用户无权恢复数据库" score_import"

SA拥有完全许可。知道我错过了什么吗? Delphi XE6,Windows 10 Sql 2012。

1 个答案:

答案 0 :(得分:1)

感谢Embarcadero的支持。他们可以重现我的问题并通过从连接字符串中删除Integrated Security=""来解决它。如果您对原因感兴趣,请在Google上搜索" ADO Integrated Security"。