none
abilitare un utente SQL ad accedere ad un solo database RRS feed

  • 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

    martedì 30 marzo 2021 08:57

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

    martedì 30 marzo 2021 13: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

    martedì 30 marzo 2021 13: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

    mercoledì 31 marzo 2021 07:47
  • 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.

    mercoledì 31 marzo 2021 08:27
  • 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

                                          
    mercoledì 31 marzo 2021 09:14
  • Confronta l'owner del database dei due sistemi: Database Property->Files->Owner

    G.

    mercoledì 31 marzo 2021 13:01