Principale utente con più risposte
abilitare un utente SQL ad accedere ad un solo database

Domanda
-
salve
sono utente sa e ho una istanza con 4 db (Produzione, Test, Prova1, Prova2)
ho creato un utente (SQL) TestUtente
come posso abilitare tale utente ad accedere come sysadmin al solo database Test per l'utente TestUtente?devo andare in
Sicurezza --> Account di accesso --> SELEZIONARE l'utente --> proprietà
==> Ruoli del server ho
x Public
==> Mapping utenti cosa devo mettere?
perper i database Test
e per gli 3 altri database ?
GRAZIE
Risposte
-
Ciao,
distinguiamo tra ruoli dell'istanza "server-role" e ruoli del database "db-role".
Se sei sysadmin - è una server-role - allora vedi tutto e fai tutto sia sull'istanza (backup, linked server, secuirty, etc etc ) che su qualsiasi database (crei e cancelli tabelle, fai insert update e delete, etc etc).
Una login che deve solo operare su database utente ben precisi è sufficiente che abbia server-role public e poi, in ciascun database, il db-role più opportuno come: db_datawriter, db_datareader, db_owner, etc..
Nel tuo caso basta che dai a TestUtente server-role public e poi, nella sezione User Mapping metti la checkbox sul database Test e e nella sezione sottostante, database role, metti la check su db_owner: così TestUser nel solo database Test ha tutti i superpoteri ma fuori di esso non vede nulla.
Per gli altri 3 database non fai nulla: TestUtente su di essi non potrà fare nulla.
Giorgio
- Contrassegnato come risposta Edoardo BenussiMVP, Moderator martedì 6 aprile 2021 07:50
Tutte le risposte
-
Ciao,
distinguiamo tra ruoli dell'istanza "server-role" e ruoli del database "db-role".
Se sei sysadmin - è una server-role - allora vedi tutto e fai tutto sia sull'istanza (backup, linked server, secuirty, etc etc ) che su qualsiasi database (crei e cancelli tabelle, fai insert update e delete, etc etc).
Una login che deve solo operare su database utente ben precisi è sufficiente che abbia server-role public e poi, in ciascun database, il db-role più opportuno come: db_datawriter, db_datareader, db_owner, etc..
Nel tuo caso basta che dai a TestUtente server-role public e poi, nella sezione User Mapping metti la checkbox sul database Test e e nella sezione sottostante, database role, metti la check su db_owner: così TestUser nel solo database Test ha tutti i superpoteri ma fuori di esso non vede nulla.
Per gli altri 3 database non fai nulla: TestUtente su di essi non potrà fare nulla.
Giorgio
- Contrassegnato come risposta Edoardo BenussiMVP, Moderator martedì 6 aprile 2021 07:50
-
grazie del messaggio
ho seguito
>Nel tuo caso basta che dai a TestUtente server-role public e poi, nella sezione User Mapping metti la checkbox >sul database Test e e nella sezione sottostante, database role, metti la check su db_owner: così TestUser nel solo >database Test ha tutti i superpoteri ma fuori di esso non vede nulla.
e in effetti pettendo l'utente solo con public e per il singolo db writer, reader e db_owner va bene
C'E' IL MODO DI oltre a disabilitare l'accesso agli altri db NON LI VEDA?
GRAZIE
-
Si,
ad esempio disattivando il diritto di VIEW DATABASE a Public - quindi a tutti gli utenti che non siano sysadmin - e poi assegnando l'ownership dei singoli database agli user opportuni:
USE MASTER GO DENY VIEW ANY DATABASE TO public GO use Test go exec sp_changedbowner 'TestUtente' go
Operare su permission e roles richiede una buona conoscenza di questi argomenti: come vedi i settaggi "di fabbrica" sono parecchi ed interagiscono fra loro in moltissimi modi differenti.
G.
-
GRAZIE
non capisco come mai
nella mia istanza locale
- creato utente
--> ruoli server --> public
--> Mapping utente --> selezionato il database che mi interessa
--> db_datareader
--> db_datawriter
--> db_owner
--> Entità a protezione diretta
--> connessione a SQL --------------------> Flag concedi
--> Visualizzazione qualsiasi database ---> Flag negato
autenticandomi vedo solo il database che mi interessa e non quelli di sistema
Facendo la stessa cosa su un'altra istanza
autenticandomi con l'utente creato mi fa solo vedere i database di sistema e non quello che ho definito
-