Autorizzazioni di SQL Server per creare, ripristinare, eliminare solo alcuni database


17

Su MS SQL Server 2008 R2, ho bisogno di un utente in grado di creare, ripristinare, DBCC CHECKDB e quindi eliminare i database. Ma non deve essere in grado di accedere o eliminare database specifici sul server (motivi di sicurezza). Questa configurazione è possibile?


È possibile ottenere alcuni suggerimenti qui: toadworld.com/platforms/sql-server/w/wiki/…
dezso

Risposte:


27

Sì, è possibile tramite un paio di autorizzazioni.

Innanzitutto, per creare un database , è necessario concedere l'autorizzazione a livello di server Create Any Database. Questa autorizzazione fa proprio quello che sembra - il potere di creare un database. Si noti che questo non sta assegnando il ruolo predefinito del server dbcreator all'accesso, poiché quel ruolo predefinito del server fornisce autorizzazioni di modifica / eliminazione su qualsiasi database. Create Any Databaseconsente al login di avere quel potere solo sui database di loro proprietà. Ciò darà anche la possibilità di ripristinare.

(Così facendo SOLO "Crea qualsiasi database" - stai dando la possibilità di creare un nuovo database, ma evitando la possibilità di eliminare o modificare QUALUNQUE database che potresti ottenere usando il ruolo predefinito del server dbcreator)

Per concedere questa autorizzazione "Crea qualsiasi database" -

use [master]
GO
GRANT CREATE ANY DATABASE TO [LoginName]
GO

Per la possibilità di eseguire DBCC CHECKDBe eliminare database : il ruolo predefinito del database db_owner è sufficiente. Questo garantisce tutto ciò che stai richiedendo. Nota: stai anche concedendo a questo utente la possibilità di selezionare, eliminare, troncare, aggiornare e inserire con db_owner. Mi piace pensarlo come sysadminall'interno di un database.

Applicherai questa autorizzazione solo al database su cui intendi avere questa capacità. Ciò ti consentirà di controllare su quali database l'utente può rilasciare, ripristinare o archiviare il database. Tutti i database su cui non hai concesso queste autorizzazioni all'utente saranno al sicuro da questo utente che esegue queste azioni

Per fare ciò, devi prima mappare l'accesso a un utente del database:

USE [DatabaseName]
GO
CREATE USER [UserName] FOR LOGIN [LoginName] 
GO

E quindi aggiungi quell'utente al db_ownerruolo (Funziona in SQL Server 2012 e versioni successive):

ALTER ROLE [db_owner] ADD MEMBER [frank]
GO

Per SQL Server 2008 dovresti usare la procedura memorizzata nel sistema per aggiungere un membro del ruolo come un commentatore sotto indicato giustamente:

EXEC sp_addrolemember 'db_owner', 'frank';

Puoi anche fare tutto questo tramite la GUI. Le informazioni di accesso che faresti tramite la cartella di sicurezza in SSMS a livello di istanza: fai clic con il tasto destro del mouse su login -> Proprietà -> Titoli. Per il livello del database, lo faresti tramite la cartella di sicurezza a livello del database: fai clic con il pulsante destro del mouse e seleziona il nuovo utente -> scegli il login che desideri all'utente dal tuo elenco di accessi al server / dai un nome all'utente del database -> vai a la scheda appartenenza per selezionare l'appartenenza al ruolo.

Il sistema di aiuto di SQL Server, Books Online, è una risorsa fantastica anche per la maggior parte delle domande relative alle autorizzazioni, se si determina che è necessario assegnare altre autorizzazioni. Fai semplicemente una ricerca per il comando T-SQL a cui desideri concedere le autorizzazioni e in genere c'è una sezione Autorizzazioni per quel comando nell'articolo che ti consente di sapere quali autorizzazioni sono necessarie per eseguire questa azione. Puoi guardare l'articolo per DBCC CHECKDB per un esempio - circa 7/8 del modo in cui l'articolo è la sezione autorizzazioni.


3
Vorrei solo aggiungere che ALTER ROLE [db_owner] ADD MEMBER [frank]funziona solo da SQL Server 2012. Se sei su SQL Server 2008 uno dovrebbe andare con SP: EXEC sp_addrolemember 'db_owner', 'frank';(Rif qui e qui )
superjos
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.