2012-04-28 14 views
22

Ho creato un nuovo utente sul server che accederà a determinati database.Autorizzazioni di backup

Ma quando vado a backup o il ripristino del database ottengo l'errore:

C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup
Cannot access the specified path or file on the server. Verify that you have the necessary security privileges and that the path or file exists.....................

L'errore mostra per qualsiasi altro percorso nel mio sistema. Anche quelli in cui l'utente e l'account di servizio dispongono di autorizzazioni di controllo completo.

MA, se si digita il percorso completo e si fa clic su OK, si lamenta che non può essere visualizzato, MA esegue il backup o il ripristino del database. Semplicemente non mostra la vista ad albero per il percorso.

Se eseguo l'operazione utilizzando l'account sa, la finestra di dialogo mostra tutti i percorsi senza reclamo.

PS: già utente aggiunto al ruolo db_backoperator.

Quali autorizzazioni sono necessarie?

risposta

13

Si connette utilizzando un accesso di autenticazione SQL o un accesso di Windows? Se si esegue un login di autenticazione SQL, come si concede il login SQL "autorizzazioni di controllo completo" a una cartella in Windows? Windows non ha idea di eventuali accessi di autenticazione SQL creati in SQL Server. Per favore mostraci esattamente cosa intendi con "Ho creato un utente sul server" - quale utente? quale server? SQL Server o Windows?

Come soluzione alternativa, è anche possibile creare una stored procedure eseguita come sa o un accesso di Windows che fa parte del gruppo sysadmin e offrire all'utente con privilegi inferiori la possibilità di eseguire. Tuttavia sono stato in grado di eseguire il backup di un database con l'aggiunta di un utente peon senza altri permessi a tutti e semplicemente aggiungendoli alla db_backupoperator ruolo:

CREATE LOGIN peon WITH PASSWORD = 'foo', CHECK_POLICY = OFF; 
GO 
CREATE DATABASE splunge; 
GO 
USE splunge; 
GO 
CREATE USER peon FROM LOGIN peon; 
GO 
EXEC sp_addrolemember 'db_backupoperator', 'peon'; 
GO 
EXECUTE AS USER = 'peon'; 
GO 
BACKUP DATABASE splunge 
    TO DISK = 'C:\tmp\splung.bak' -- change this path obviously 
    WITH INIT, COMPRESSION; 
GO 
REVERT; 
GO 

Quindi, vorrei confermare che l'account di servizio di SQL Server dispone di privilegi sufficienti per scrivi sul percorso in questione. So che hai detto che questo era il caso, ma come ho dimostrato questo non sembra essere un problema con l'utente peon ma piuttosto la capacità del motore sottostante di scrivere sul file system.Se si tenta il comando di backup sopra senza aggiungere peon al ruolo db_backupoperator, si ottiene questo errore (non consentono di ottenere da nessuna parte vicino il comando di backup effettiva o verificare eventuali autorizzazioni sul disco):

Msg 262, Level 14, State 1, Line 1 
BACKUP DATABASE permission denied in database 'splunge'. 
Msg 3013, Level 16, State 1, Line 1 
BACKUP DATABASE is terminating abnormally. 

Se questo è un login di Windows, quindi si prega di verificare che l'utente abbia, in effetti, le autorizzazioni di scrittura per la cartella in questione. Prova un'altra cartella diversa dalla gerarchia sotto C:\Program Files\... e non provare a scrivere direttamente nella radice (ad esempio C:\file.bak).

+1

Ok. Mi spiego meglio: ho creato un login, che è il controllo Auth di SQL Server, e concedo le autorizzazioni di db_backupoperator e così via. Il punto è: può scrivere il backup sul disco, ma non può mostrare la struttura del file (la vista ad albero sulla finestra di dialogo) al sistema, anche i percorsi che l'utente ha le autorizzazioni (l'utente di Windows registrato e l'account di servizio). Proverò la procedura e vedrò cosa ottengo ..... Grazie dal modo ... –

+0

Controlla se il tuo utente può eseguire xp_fixeddrives, xp_dirtree e xp_fileexist - questo è ciò che la finestra di dialogo fa dietro le quinte. Personalmente vorrei creare una procedura memorizzata che ha portato il database a fare il backup come argomento e controllare la posizione di output anziché consentire all'utente di scegliere la destinazione da una finestra di dialogo (o utilizzare l'interfaccia utente). La finestra di dialogo posizione manca di alcune funzionalità di base (come creare una cartella) ed è stato così per anni ... –

1

La mia ipotesi è che questo sia un problema con l'autenticazione di Windows e la sicurezza integrata. SQL Server talvolta impersona l'accesso dell'utente. Prova ad aggiungere le autorizzazioni ACL di Windows per l'utente Windows con cui stai effettuando l'accesso.

+0

Ciò accade anche quando sono registrato come amministratore di Windows ma utilizzando il login Sql "utente" (non il Sa). Questo ha a che fare con sicurezza integrata o ruoli/permessi? Questo è il mio problema attuale in questo momento, non so dove sia il problema =/ –

12

db_backupoperator è un ruolo del database, non un ruolo del server o un'autorizzazione Windows. Concede all'utente solo l'accesso necessario alla banca dati per effettuare un backup. Non concede alcun diritto alla struttura del file del server, necessaria per realizzare effettivamente il file di backup.

IIRC, per accedere alla struttura dei file per fare un backup, l'utente deve già avere finestre/diritti di dominio per accedere, o il ruolo del server sysadmin di pick-up propri diritti di accesso di Windows di SQL Server.

Inoltre, per ripristinare un database, l'utente avrà bisogno del ruolo del server dbcreator.

+0

Ho aggiunto il diskadmin, dbcreator e serveradmin ma non riesco a lavorare. Con sysadmin funziona bene, ma non posso lasciare che l'utente sia un amministratore di sistema. –

+0

Bene, diskadmin e serveradmin di cui non ero sicuro. Vedi se sysadmin funziona. – RBarryYoung

1

Sto eseguendo Windows 10 (x64), SQL Server Express 2014, cercando di ripristinare un backup in un database SQL Server 2005 x86 in modo da poter utilizzare i dati e risolvere un bug nella nostra applicazione. Mi sono imbattuto nello stesso scenario con le autorizzazioni durante il backup e il ripristino di un file .bak.

La stessa cosa qui, sono un amministratore sul mio PC, ho presupposto (il mio errore) che il servizio SQL Server era in esecuzione sotto il mio account di Windows (perché mi piacerebbe accedere a SQL Management con le mie credenziali di Windows).

Quindi quello che ho fatto è stato andare in Servizi in Windows, ho trovato SQL Server, fatto clic destro su Proprietà, ho interrotto il servizio, poi sono andato alla scheda LogOn e ho cambiato "Accedi come" a "Account di sistema locale" e controllato la casella con la scritta "Consenti al servizio di interagire con il desktop". Ho iniziato il servizio, e stavo arrivando.

Poiché il mio ambiente è chiuso, solo per lo sviluppo, questa è stata una soluzione rapida per me. Dovrei avvertirti, questa non è una buona pratica per gli utenti finali! Solo per noi dev.