Come posso controllare le impostazioni di sicurezza di un endpoint di SQL Server?


10

Sono in procinto di creare un ambiente TEST per il nostro personale di sviluppo di SQL Server.

In produzione abbiamo 3 server SQL, SQL01contiene diversi database su cui è stato eseguito il mirroring SQL02. SQL03funge da testimone in "alta sicurezza con failover automatico" o configurazione sincrona.

Ho usato VMWare P2V per virtualizzare tutte e tre le macchine su hardware separato, ho riconfigurato i SID delle macchine e ho oscurato gli indirizzi IP dei nostri server di produzione da queste nuove macchine.

Inizialmente avevo dimenticato di bucare la macchina testimone di produzione, quindi i database sulle macchine TEST stavano ancora usando la SQL03macchina come testimone. Notando il problema, ho deciso di riconfigurare i database su TEST per puntare al testimone TEST appena virtualizzato, chiamarlo TEST03.

Per riconfigurare il database per utilizzare il nuovo testimone, ho inserito il seguente comando sul server primario TEST01:

ALTER DATABASE [TestDB] SET WITNESS = 'TCP://TEST03.domain.inet:5022';

La risposta è stata inaspettata:

The ALTER DATABASE command could not be sent to the remote server instance
'TCP://TEST03.domain.inet:5022'.  The database mirroring configuration was
not changed.  Verify that the server is connected, and try again.

Sono rimasto molto perplesso da questo messaggio di errore poiché la configurazione funziona sulle macchine di produzione e non è stata modificata in alcun modo sulle macchine di prova.

Per farlo funzionare ho dovuto creare un LOGINtestimone sul test:

CREATE LOGIN [DOMAIN\SQLServiceAccount] FOR WINDOWS WITH DEFAULT_DATABASE [Master];

e GRANTIT CONNECTdiritti sull'endpoint in questione:

GRANT CONNECT ON ENDPOINT::Mirroring TO [DOMAIN\SQLServiceAccount];

Sono stato quindi in grado di indirizzare con successo i database con mirroring sull'ambiente TEST al nuovo testimone del test.

Come posso controllare l'endpoint del testimone di produzione per vedere quale sicurezza è associata ad esso?

Presumo che ci debba essere un catalogo di sistema che posso ispezionare, tuttavia Books-on-Line non sembra avere nulla di specifico per gli endpoint e Bing sta bene, Bingless ...


Informazioni addizionali:

SELECT ep.endpoint_id, p.class_desc, p.permission_name, ep.name, sp.name 
FROM sys.server_permissions p
    INNER JOIN sys.endpoints ep ON p.major_id = ep.endpoint_id
    INNER JOIN sys.server_principals sp ON p.grantee_principal_id = sp.principal_id
WHERE class = '105';

ritorna:

endpoint_id class_desc  permission_name endpoint_name   principal_name
2           ENDPOINT    CONNECT TSQL    Local Machine   public
3           ENDPOINT    CONNECT TSQL    Named Pipes     public
4           ENDPOINT    CONNECT TSQL    Default TCP     public
5           ENDPOINT    CONNECT TSQL    Default VIA     public

E:

SELECT name, endpoint_id, protocol_desc, type_desc, role_desc 
FROM sys.database_mirroring_endpoints;

Ritorna:

name        endpoint_id  protocol_desc  type_desc           role_desc 
Mirroring   65536        TCP            DATABASE_MIRRORING  WITNESS

Non sembra esserci alcuna voce sys.server_permissionsper l'oggetto endpoint del mirroring. No major_ide nessuna minor_idcorrispondenza 65536. Inoltre, nessuno dei database di sistema contiene alcun riferimento all'endpoint.

Sono in perdita.

Risposte:


7

Dopo aver trascorso una parte della giornata a occuparmi dello spostamento di database con mirroring da server a server nel nostro ambiente DEV in preparazione per il nostro passaggio a SQL Server 2012, mi sono imbattuto in questo documento MSDN che spiega che la sicurezza ENDPOINT è determinata esclusivamente in base al tipo di account SQL Server è in esecuzione sotto. Se SQL Server utilizza un account di dominio, tale account ha automaticamente accesso all'endpoint. Se SQL Server utilizza un account incorporato come [Servizio di rete] o [Sistema locale] ecc., L'endpoint deve essere configurato con un certificato di sicurezza e solo i titolari del certificato possono accedere all'endpoint.

La sezione pertinente del documento:

Determinazione del tipo di autenticazione per un endpoint del mirroring del database

È importante comprendere che gli account del servizio SQL Server delle istanze del server determinano il tipo di autenticazione che è possibile utilizzare per gli endpoint del mirroring del database, come indicato di seguito:

Se ogni istanza del server è in esecuzione con un account del servizio di dominio, è possibile utilizzare l'autenticazione di Windows per gli endpoint del mirroring del database. Se tutte le istanze del server vengono eseguite come lo stesso account utente di dominio, gli accessi utente corretti esistono automaticamente in entrambi i database master. Ciò semplifica la configurazione della sicurezza per i database di disponibilità ed è consigliato.

Se qualsiasi istanza del server che ospita le repliche di disponibilità per un gruppo di disponibilità viene eseguita come account diversi, è necessario creare il login di ciascun account nel master sull'altra istanza del server. Quindi, a quell'account di accesso devono essere concesse le autorizzazioni CONNECT per connettersi all'endpoint del mirroring del database di tale istanza del server.

Se le istanze del server utilizzano l'autenticazione di Windows, è possibile creare endpoint di mirroring del database utilizzando Transact-SQL, PowerShell o la procedura guidata Nuovo gruppo di disponibilità.

Nota:

Se un'istanza del server che deve ospitare una replica di disponibilità manca di un endpoint del mirroring del database, la procedura guidata Nuovo gruppo di disponibilità può creare automaticamente un endpoint del mirroring del database che utilizza l'autenticazione di Windows.

Se un'istanza del server è in esecuzione con un account integrato, come Sistema locale, Servizio locale o Servizio di rete o un account non predefinito, è necessario utilizzare i certificati per l'autenticazione dell'endpoint. Se si utilizzano certificati per gli endpoint del mirroring del database, l'amministratore di sistema deve configurare ciascuna istanza del server per utilizzare i certificati su entrambe le connessioni in uscita e in entrata.

Non esiste un metodo automatizzato per la configurazione della sicurezza del mirroring del database utilizzando i certificati. Sarà necessario utilizzare l'istruzione CREATE ENDPOINT Transact-SQL o il cmdlet New-SqlHadrEndpoint PowerShell. Per ulteriori informazioni, consultare CREATE ENDPOINT (Transact-SQL).

Remus Rusanu (nella sua risposta) ha correttamente identificato come determinare la sicurezza in atto su un endpoint di mirroring; come in:

SELECT ep.name, sp2.name AS Grantee, sp.name AS Grantor, p.permission_name, ep.state_desc
FROM sys.server_permissions p 
    INNER JOIN sys.endpoints ep ON p.major_id = ep.endpoint_id
    INNER JOIN sys.server_principals sp ON p.grantor_principal_id = sp.principal_id
    INNER JOIN sys.server_principals sp2 ON p.grantee_principal_id = sp2.principal_id
WHERE p.class_desc = 'ENDPOINT' AND ep.type_desc = 'DATABASE_MIRRORING'

Tuttavia, nel mio caso su SQL Server 2005, gli endpoint del mirroring originale non vengono visualizzati nei risultati di questa query. Presumo che ciò sia dovuto al fatto che la protezione predefinita consente l'accesso CONNECT all'account in cui è in esecuzione SQL Server (come spiegato sopra).

Quindi la risposta canonica alla domanda, come fai a sapere chi ha accesso CONNECT a un ENDPOINT, è la somma della query sopra e l'account che SQL Server sta usando, insieme a tutti i possibili certificati che hai configurato con l'accesso all'endpoint .


4

Mi è capitato di averlo impostato per un database in produzione e mi chiedevo la stessa cosa perché avevo bisogno di confrontare la configurazione con un'altra sessione di mirroring per assicurarmi di abbinarla correttamente.

sys.dm_db_mirroring_connectionsdovrebbe fornirti quello che vuoi. Contiene ciò principal_nameche è:

Nome dell'account di accesso convalidato per le autorizzazioni di connessione. Per l'autenticazione di Windows, questo valore è il nome utente remoto. Per l'autenticazione con certificato, questo valore è il proprietario del certificato.

Se stai lavorando con una sessione in pausa anche se non sono sicuro che ciò restituirà comunque le informazioni, credi che abbia solo connessioni attive.


Grazie Shaun. Ciò mostra certamente il nome utente remoto effettivamente connesso all'endpoint, tuttavia non risponde realmente alla domanda su quale impostazione di sicurezza consenta a quell'utente di connettersi in produzione, ma non in fase di test. Apprezzo comunque l'aiuto!
Max Vernon,

3

Consultare la documentazione della documentazione online per sys.database_mirroring_endpoints

Per le autorizzazioni oggetto server si guarda al solito posto, sys.server_permissions. Come in tutti i casi in cui è coinvolta la sicurezza di Windows, le cose sono più complicate a causa dell'appartenenza ai gruppi di Windows e bisogna anche considerare la gerarchia delle autorizzazioni .


L'ho osservato, tuttavia, ciò di cui ho bisogno è un elenco di accessi con accesso CONNECT all'endpoint. sys.database_mirroring_endpoints non sembra dimostrarlo - a meno che non mi manchi qualcosa!
Max Vernon,

1
Per le autorizzazioni oggetto server si guarda al solito posto, sys.server_permissions. Come in tutti i casi in cui è coinvolta la sicurezza di Windows, le cose sono più complicate a causa dell'appartenenza ai gruppi di Windows e bisogna anche considerare la gerarchia delle autorizzazioni .
Remus Rusanu,

3
Qualche possibilità che potresti approfondire leggermente nella risposta stessa?
jcolebrand
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.