Come posso nascondere una stringa di connessione DAO o ADODB in un documento o modello Word?

1

I documenti MS Word hanno un componente Visual Basic che consente l'esecuzione dei processi quando si verificano eventi specifici.

Uno di questi eventi è Document_New() , che può essere utilizzato in questo modo per far apparire un "Form utente" che fa anche parte del documento Word:

Private Sub Document_New()
    Dim myForm As UserForm1
    Set myForm = New UserForm1
    myForm.Show
End Sub

Il Form utente sembra proprio un modulo VB6 o MS Access e vari controlli possono essere aggiunti per raccogliere input dall'utente. In questo caso, verrà inserito un pulsante "Invia" con un evento OnClick() che accede al database e restituisce un recordset utilizzato nel documento / modello.

Il codice sottostante può eseguire query SQL su un server SQL utilizzando un modello di oggetto DAO o ADODB.

L'obiettivo è eseguire alcune query SQL o stored procedure che restituiscano i dati necessari per il documento di Word. Tutto questo può essere fatto con il codice e ci sono un milione di esempi e modi per farlo.

Tuttavia ... La stringa di connessione per il driver ODBC o la connessione ADODB lascia il nomeserver / nome utente / password visibili a chiunque abbia accesso al documento o modello Word (es. l'utente apre documento / modello in Word e guarda il VB codice e ora può connettersi e fare qualsiasi cosa alle tabelle del database).

Come posso creare questa funzionalità ma non permettere che le proprietà della stringa di connessione siano visibili a qualcuno che utilizza il documento / modello?

Se si trattava di un'applicazione VB6, potrebbe essere compilata. Ma questo è solo un documento Word o un modello e non è compilabile.

Non credo che la funzionalità "Encrypted" si applichi qui. Questo semplicemente crittografa i dati attraverso la rete. Le proprietà della stringa di connessione sono ancora visibili all'occhio del tifoso.

    
posta JustJohn 03.10.2017 - 02:05
fonte

2 risposte

2

Configurare il database per utilizzare l'autenticazione di Windows, quindi aggiungere IntegratedSecurity = true alla stringa di connessione. Questo avrà la connessione utilizzare l'autorizzazione dell'utente connesso per connettersi al database.

Questo ti protegge in diversi modi. Come richiesto, nessun utente / password è tenuto nella stringa di connessione.

Un altro modo in cui questo ti protegge è che è l'autorizzazione dell'utente che si collega al database, non un documento Word. Questo è importante perché l'autorità non dovrebbe viaggiare nascosta all'interno di un documento. L'utente controlla la propria autorità.

Infine, se stai utilizzando Active Directory, puoi utilizzare l'appartenenza al gruppo AD per perfezionare l'accesso al database, assicurando che solo i membri del gruppo approvati possano utilizzare il documento Word per accedere al database a qualsiasi livello desideri.

    
risposta data 03.10.2017 - 03:45
fonte
1

How can I create this functionality but not allow the connection string properties to be visible to someone using the document/template?

Non puoi. La stringa di connessione sarà visibile a chiunque abbia il file. Questo è vero, comunque, anche se è un'applicazione compilata. Ci vuole solo un po 'più di lavoro per farli uscire.

Quindi cosa fare?

Il suggerimento di Joahn Deters è buono. Tuttavia, anche se lo fai, gli utenti avranno comunque accesso completo in lettura e scrittura al tuo database. Non è ottimale.

Non importa se segui il consiglio di Johns o no, dovresti anche seguire il principio di minimo privilegio . Ciò significa che l'utente del database (che si tratti delle credenziali nella stringa di connessione o della sicurezza integrata di Windows) dovrebbe solo avere accesso alle informazioni di cui ha bisogno. Quindi limitati a leggere solo dalle tabelle necesariche e scrivi da nessuna parte.

    
risposta data 03.10.2017 - 09:47
fonte

Leggi altre domande sui tag