Come posso assegnare un intero accesso di sicurezza a un gruppo di Active Directory in SQL Server 2008?


40

Vorrei utilizzare la sicurezza integrata con la mia applicazione interna che è tutto su un dominio. Sfortunatamente, non sono mai stato in grado di farlo funzionare bene. Vorrei assegnare a un intero gruppo Exchange (Active Directory) un ruolo in SQL Server per l'accesso in lettura / scrittura a determinate tabelle. In questo modo non dovrei creare un operatore ogni volta che qualcuno viene assunto o eliminare un operatore ogni volta che qualcuno viene licenziato. È possibile? Quali passi prenderei per fare questo?

Risposte:


48
  • Imposta il gruppo AD come login. E "login" significa login a livello di server non il concetto AD di user / login. In SQL Server, si tratta di un'entità a livello di server
  • Crea un utente mappato in. Non dovresti davvero autorizzare un utente direttamente sulle tabelle. E "utente" significa che l'utente del database non è il concetto di utente AD: in SQL Server, si tratta di un "principal a livello di database"
  • Aggiungi utente al ruolo (anche "principale a livello di database")
  • Autorizzazioni GRANT per i ruoli nelle tabelle (una tabella o proc ecc è un "sicuro")

Script di esempio

USE master;
GO
CREATE LOGIN [MYDOMAIN\APPLICATION SUPPORT] FROM WINDOWS;
GO
USE mydb;
GO
CREATE USER [MYDOMAIN\APPLICATION SUPPORT] FROM LOGIN [MYDOMAIN\APPLICATION SUPPORT];
GO
CREATE ROLE rSupport;
GO
EXEC sp_addrolemember 'rSupport', 'MYDOMAIN\APPLICATION SUPPORT';
GO
GRANT SELECT, INSERT,UPDATE, etc ON Mytable TO rSupport;
GO

sp_addrolememberè obsoleto a partire da SQL Server 2012, dove ALTER ROLEdovrebbe essere utilizzato invece.


3
Sarebbe utile spiegare perché dovresti assegnare autorizzazioni ai ruoli anziché agli utenti SQL (in questo caso, gruppi AD).
Ha disegnato Chapin il

Forse intendi "creare un utente [...] per l' accesso [...]", anziché "dall'accesso"?
Agostino,

CREA UTENTE ... PER ACCEDI ...; e CREA UTENTE ... DA LOGIN ...; entrambi funzionano per me (MSSQL2016). Non sei sicuro che ci sia differenza?
Ingegnere invertito


4

Concedere le autorizzazioni all'interno di SQL Server a un gruppo AD è relativamente semplice. Può essere fatto tramite T-SQL o Management Studio.

Ad esempio, se si chiama un gruppo AD MYDOMAIN\APPLICATION SUPPORT, è necessario creare l'accesso a livello di server e quindi utilizzare i mapping ai singoli database per fornire autorizzazioni leggermente più granulari come il lettore di dati.

Idealmente, l'accesso a tutte le applicazioni dovrebbe avvenire tramite stored procedure *, pertanto è necessario eseguire solo le autorizzazioni per le stored procedure in quel database.

* Da un punto di vista della sicurezza, per consentire a un determinato utente di visualizzare alcuni dati specifici, è possibile creare una procedura e concedere all'utente l' esecuzione dell'autorizzazione su tale procedura e nient'altro. Consentire all'utente di interrogare direttamente significherebbe concedere l' autorizzazione selezionata su tutte le tabelle interessate. È anche più semplice lavorare con le procedure e più facile eseguire il debug.

Le procedure memorizzate eliminano l'accesso alla tabella e ne limitano l'accesso. Per i tipi DBA, è come "fammi vedere tutte le variabili dell'istanza: non voglio usare metodi, getter o setter".


3

Da marc_s rispondendo "Come aggiungere il gruppo utenti di Active Directory come login in SQL Server" :

In SQL Server Management Studio, vai Object Explorer > (your server) > Security > Loginse fai clic con il pulsante destro del mouse New Login:

inserisci qui la descrizione dell'immagine

Quindi nella finestra di dialogo che appare, scegli i tipi di oggetti che vuoi vedere ( Groupsè disabilitato di default - controllalo!) E scegli la posizione in cui vuoi cercare i tuoi oggetti (es. Usa Entire Directory) e poi trova il tuo gruppo AD .

inserisci qui la descrizione dell'immagine

Ora disponi di un normale accesso a SQL Server, proprio come quando ne crei uno per un singolo utente AD. Dai a quel nuovo login le autorizzazioni sui database di cui ha bisogno, e il gioco è fatto!

Qualsiasi membro di quel gruppo AD ora può accedere a SQL Server e utilizzare il database.


2
Il collegamento a quella risposta SO è probabilmente utile ma non stai aggiungendo nulla di nuovo al post, vero? Potresti aver appena pubblicato il link come commento.
Andriy M

2
La risposta ha una bella schermata per il controllo di Gruppi in Tipo di oggetto, poiché è quello che mi mancava quando stavo cercando di farlo. A mio avviso, un link non lo mostra in modo altrettanto utile. Sto solo cercando di aiutare la prossima persona ...
Anche Mien,

Cosa intendi? Di solito c'è un link per seguirlo, e tutti quelli che seguono il link vedrebbero il bel screenshot di cui stai parlando, così come tutto il resto che hai ripubblicato qui. Non litigherò, però, solo per farti sapere che la mia opinione è invariata: un link (in un commento) farebbe altrettanto.
Andriy M,

4
Anche la mia opinione è invariata. Un collegamento in un commento non trasmette le stesse informazioni di un'immagine reale in una pagina Web. "Mostra, non dirlo."
Anche Mien,

1

Se l'utente è membro di un DOMAIN \ SecurityGroup che dispone dell'autorizzazione Sysadmin in SQL, verrà utilizzato durante l'accesso ai database. Altrimenti è necessario esaminare quali DOMAIN \ SecurityGroup (s) hanno dato l'autorizzazione in ciascun database. Se l'utente è membro di 2 SecurityGroups, con SecGroupA con autorizzazione di selezione e SecGroupB con autorizzazione di inserimento, l'utente può selezionare e inserire.

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.