INFORMAZIONI: Come Visual Basic 3.0 Handles insieme protezione da Microsoft Access

Traduzione articoli Traduzione articoli
Identificativo articolo: 105990 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo č stato archiviato. L?articolo, quindi, viene offerto ?cosė come č? e non verrā pių aggiornato.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

Visual Basic versione 3.0 include il modulo di gestione di database di Microsoft Access. Visual Basic contiene la sintassi per modificare un database di Microsoft Access in modo quasi che Microsoft Access. Un'eccezione principale č nell'area di protezione. Solo Microsoft Access consente di impostare o modificare le opzioni di protezione (quali ID di accesso e password per il sistema) e impostare o modificare autorizzazioni su oggetti specifici in un database specifico.

Visual Basic versione 3.0 deve contenere due istruzioni (SetDataAccessOption e SetDefaultWorkspace) che consentono un'applicazione Visual Basic per soddisfare il meccanismo di protezione che implementa Microsoft Access e accedono utilizzando il codice di Visual Basic. Utilizzando queste istruzioni, č possibile ottenere le autorizzazioni concesse a un particolare utente.

In questo articolo viene descritto i meccanismi di protezione applicabili a Visual Basic versione 3.0 e il programmatore di Visual Basic. Le funzionalitā di protezione intero di Microsoft Access sono oltre l'ambito di questo articolo.

Per una descrizione completa delle funzionalitā di protezione di Microsoft Access, consultare l'articolo della Knowledge Base:
122036WX1051: Impostazione guidata protezione e il white Paper App. Nota 2.0

Informazioni

La protezione viene implementata in due parti:
  • Ogni utente e il gruppo dispone di un identificatore (SID, Security ID) codice di protezione univoco.
  • Tale codice di SID č memorizzato nel database along with le autorizzazioni per tale SID associati.
Le due sezioni successive forniscono i dettagli.

Ogni utente e gruppo con ID di protezione univoco (SID)

In Microsoft Access, ogni utente e gruppo dispone di un ID di protezione (SID). Il SID č una stringa binaria che identifica l'utente o gruppo. Quando un utente accede, se nella finestra di dialogo accesso in Microsoft Access o dal codice in Visual Basic (illustrata pių avanti nell'articolo), il modulo di gestione di Microsoft Access legge dalla tabella MSysAccounts del database SYSTEM.MDA. Questo database viene creato solo da Microsoft Access e se viene eliminata la copia originale verrā creato uno nuovo (vuoto).

Nota: Se viene eliminato accidentalmente l'originale SYSTEM.MDA, SID univoci sono persi. Di conseguenza, č anche perse tutte le possibilitā di accedere al database protetti. Pertanto č consigliabile eseguire il backup sia del database e della file nella posizione SYSTEM.MDA quando sono state impostate le autorizzazioni sul database.

Quando effettua l'accesso, l'utente fornisce il nome dell'utente (senza distinzione tra maiuscole e minuscole) e la password (con distinzione tra maiuscole e minuscole). Se il nome utente e la password sono corrette, il SID dell'utente č recuperato e salvato in una struttura interna il modulo di gestione. La password viene utilizzata solo per la convalida dell'utente. Da questo punto in poi, quando l'utente diventa un utente convalidato, la password non ha effetto sulla protezione.

Di seguito č un punto chiave relative al comportamento di Visual Basic. Per impostazione predefinita, il modulo di gestione di Microsoft Access tenta di convalidare l'utente e la password di amministratore e "" rispettivamente. Visual Basic versione 3.0, senza alcun codice invierā questa combinazione di tasti al modulo di gestione di Microsoft Access per impostazione predefinita. Ciō significa che, anche senza utilizzare le istruzioni relative alla protezione di Visual Basic, il programma Visual Basic accedere ammissione al database, se l'utente "Admin" del gruppo Admins non č la password modificata da Nessuno il valore predefinito ("").

Una volta effettuato l'accesso, viene recuperato il SID dell'utente. Questo SID viene utilizzato per tutte le operazioni successive all'interno il modulo di gestione di Microsoft Access.

Il SID memorizzato nel database di SYSTEM.MDA

Il SID č memorizzato nel database stesso. Di conseguenza, tutte le autorizzazioni concesse a un particolare utente o gruppo vengono memorizzati anche nel database associato al SID univoco.

Verrā visualizzata un altro punto chiave relative a un comportamento di Visual Basic. Il programma di Visual Basic verrā ottenere l'accesso al database e dispone di autorizzazioni completi, seeming per ignorare il meccanismo di protezione Microsoft Access in presenza di una delle seguenti operazioni:
  • Il programmatore di Visual Basic non ha avuto la posizione del SYSTEM.MDA database in considerazione nel codice di programma.
  • L'utente "Admin" non ha la password da nessuna il valore predefinito ("").
Questo problema si verifica a causa del comportamento predefinito del modulo di gestione di Microsoft Access e Visual Basic. L'effetto combinato č per consentire la voce per il database e dei relativi oggetti da parte di codice di Visual Basic.

L'elenco dei tipi di oggetto in Microsoft Access: tabella, query, maschera, report, macro e funzionalitā. Tra questi, solo i primi due sono accessibili da codice di Visual Basic, in modo che gli altri puō essere omesso da questa spiegazione.

Nelle due sezioni seguenti viene ciascuno dei due verranno protezione legate istruzioni (SetDataAccessOption e SetDefaultWorkspace). Le due istruzioni sono progettate per fornire una scelta di SYSTEM.MDA file e le voci di accesso a un database Microsoft Access, con la protezione impostata da Microsoft Access. Questi due sezioni di seguito č una sezione che si riferisce le due istruzioni il comportamento del motore di Microsoft Access in relazione alla protezione di.

Istruzione SetDataAccessOption--Sintassi e il comportamento

SetDataAccessOption dispone dei seguenti parametri:
   SetDataAccessOption option, value

   option is a numeric value with only one legal value (1).
				

Ad esempio:
   SetDataAccessOption 1, "E:\VBPROJ\MY.INI"
				

Nel file DATACONS.TXT fornito nella directory principale della directory \VB, una costante č definita per questo valore:
   Global Const DB_OPTIONINIPATH = 1
				

SetDataAccessOption imposta il nome e il percorso del file di inizializzazione (ini) dell'applicazione. File ini dell'applicazione consente di ha effetto solo quando SetDataAccessOption utilizzato prima che la funzionalitā di accesso ai dati č caricata e inizializzata. Dopo l'accesso ai dati č stata inizializzata, questa impostazione non puō essere modificata senza prima chiudere l'applicazione. Il valore č un'espressione stringa. Per l'opzione DB_OPTIONINIPATH, l'argomento valore contiene un'espressione stringa che fornisce il percorso e nome del file di inizializzazione (ini) dell'applicazione. File di inizializzazione vengono in genere memorizzati nella directory \Windows dell'utente e hanno lo stesso nome del file eseguibile ma con estensione ini. Utilizzare questa istruzione solo se i file di inizializzazione dell'applicazione ha un nome diverso o č in una directory diversa rispetto alla directory \Windows.

L'istruzione SetDataAccessOption non č necessaria quando si esegue il progetto di Visual Basic nell'ambiente di VB.EXE se il file VB.INI (nella directory \Windows) contiene le seguenti righe:

[Opzioni]
SystemDB=T:\ACCESS\SYSTEM.MDA
UtilityDB=T:\ACCESS\UTILITY.MDA

Nota: il percorso effettivo del SYSTEM.MDA non č significativo se Microsoft Access e Visual Basic dispone di una voce che fa riferimento il SYSTEM.MDA verrā condividono. L'istruzione SetDataAccessOption non č necessario se file exe dell'applicazione ha un proprio file ini nel \Windows e i file exe e INI condividono lo stesso nome.

Istruzione SetDefaultWorkspace--Sintassi e il comportamento

SetDefaultWorkspace dispone dei seguenti parametri:
   SetDefaultWorkspace username, password
				

Se questa istruzione viene lasciata in, Visual Basic invierā l'equivalente della seguente riga al motore di database verrā incluso in Visual Basic:
   SetDefaultWorkspace "Admin" , ""
				

Questa istruzione ha l'effetto di ottenere un SID valido e ottenere la voce a tutti gli oggetti tabelle e query nel database.

Relazione tra Visual Basic e protezione di Microsoft Access

Per comprendere la relazione tra la protezione di Visual Basic e Microsoft Access, č necessario comprendere il meccanismo di protezione di Microsoft Access. Ecco una spiegazione dettagliata per vantaggio di al programmatore di Visual Basic che verrā non ha utilizzato ampiamente. Č una gerarchia di autorizzazioni in Microsoft Access. Nella parte superiore, sono disponibili gruppi. All'interno di un determinato gruppo sono gli utenti. Per concedere autorizzazioni in modo selettivo utenti particolari, tutte le autorizzazioni devono prima essere deselezionate o rimosso dal gruppo degli utenti. Quindi e solo quindi, possono autorizzazioni essere concesse o revocate per singoli utenti.

Le autorizzazioni elencate per un singolo utente sono denominate autorizzazioni esplicite. Le autorizzazioni impostate per il gruppo contenente l'account utente sono denominate autorizzazioni implicite. Autorizzazioni implicite hanno prioritā sulle autorizzazioni esplicite.

Č possibile utilizzare il menu di protezione per impostare autorizzazioni in Microsoft Access, al termine č stato aperto un database e in seguito l'utente ha accesso. Dal menu protezione, scegliere autorizzazioni per assegnare autorizzazioni per ogni oggetto nel database, ovvero in Visual Basic solo gli oggetti di tabelle e query.

Ad esempio, se si č verificato un gruppo di in Microsoft Access database denominato analisti contenente l'utenti Bob e Sue e si desidera limitare solo Bob leggere i dati e concedere le autorizzazioni completo ale, attenersi alla seguente procedura:
  1. Accedere a Microsoft Access come un utente nel gruppo di amministratori. Ad esempio, immettere Admin o Fred.
  2. Dal menu protezione, scegliere autorizzazioni (P S ALT).
  3. Gli oggetti di tabella sono il tipo predefinito. Selezionare il nome della tabella che si desidera impostare autorizzazioni su. Ad esempio, č possibile selezionare TestTbl.
  4. Impostare l'opzione nella cornice di gruppo di utenti ai gruppi. Scegliere elenco della casella combinata verso il basso e fare clic su analisti per selezionare tale gruppo.
  5. Deselezionare tutte le caselle di controllo per revocare tutte le autorizzazioni per l'intero gruppo.
  6. Ripristinare il pulsante di opzione elenco utenti e selezionare Bob. Deselezionare le caselle di controllo per tutte le autorizzazioni di Luca.
  7. Selezionare la presentazione dall'elenco e selezionare la casella di controllo completo di autorizzazioni.
  8. Fare clic sul pulsante Assegna per applicare le modifiche alla tabella.
A questo punto, si supponga di che disporre un programma Visual Basic contenente il codice seguente nell'evento di caricamento form:
Sub Form_Load ()
   Dim db As database
   Dim ds As dynaset
   Dim scenario as integer

   scenario = 'insert a value between 1 and 4 here

   select case scenario
      case 1:
         ' Do nothing

      case 2:
         SetDefaultWorkspace "bob", "leftout"

      case 3:
         SetDataAccessOption 1, "E:\VB.INI"    ' not in \WINDOWS directory

      case 4:
         SetDataAccessOption 1, "E:\VB.INI"    ' not in \WINDOWS directory
         SetDefaultWorkspace "bob", "leftout"
   end select

   Set db = OpenDatabase("E:\DATACON\BASES\ACCESS11\ASAMPLE.MDB") ' point 1
   Set ds = db.CreateDynaset("TestTbl")                           ' point 2

   autoredraw = True   ' to make Print  statement persist on the form
   Print ds(0), ds(1)

End Sub
				

Di seguito sono diversi scenari per illustrare la relazione tra Visual Basic e di protezione dall'accesso di Microsoft:

SCENARIO solo: in questo caso, non č presente alcun riferimento al percorso del file SYSTEM.MDA. Windows e il modulo di gestione di Microsoft Access sono Impossibile trovare il file .ini con la sezione [Options] elencata in precedenza in questo articolo. Di conseguenza, viene ignorato il SYSTEM.MDA e Visual Basic per impostazione predefinita la combinazione di utente e la password predefinita ("Admin", ""). Tuttavia, in precedenza, la password predefinita per l'amministratore dell'utente č stata modificata di un elemento diverso da "". Inoltre, tutte le autorizzazioni sono stati revocati per Admins il gruppo e l'utente "Admin" nel gruppo di amministratori. Di conseguenza, si verifica il seguente errore di Visual Basic nel punto 2:
Couldn't Read; No Read permission for Table or query 'f)) '

Č stata chiusa la backdoor per Visual Basic e si tenta di ignorare gli accessi nel file SYSTEM.MDA qualsiasi applicazione di Visual Basic.

SCENARIO TWO: in questo caso, poiché si richiama l'istruzione SetDefaultWorkspace senza il file SYSTEM.MDA qualsiasi puntatore, il modulo di gestione di Visual Basic Microsoft Access hunts per il file SYSTEM.MDA e, non trova, fornisce il seguente errore in punto 0 il codice:
Impossibile trovare il file 'SYSTEM.MDA'

Nota: Gli errori che si verificano in entrambi gli scenari uno e due sono uguali in si trovano se il file SYSTEM.MDA č stato spostato, rinominati o eliminati.

SCENARIO 3: in questo caso, si indica il modulo di gestione di Visual Basic Microsoft Access in cui risiede il file SYSTEM.MDA ma non viene fornita una combinazione di utente e password. Di conseguenza, anche in questo caso, Visual Basic fornisce la combinazione di utente e password sola SA ("Admin", ""), che non č pių una combinazione valida perché č impostata una password per l'account utente di amministrazione. Di conseguenza, Visual Basic fornisce il seguente errore in punto 1 nel codice:
Non č un account valido o password.

SCENARIO 4: in questo caso, č fornire entrambi i parametri correttamente. Di conseguenza, poiché assegnato Bob autorizzazione "Lettura dati" cosė come "Definizioni di lettura" per consentire di Microsoft Access Visual Basic motore per la lettura, l'applicazione Visual Basic stampa i primi due campi nel primo record della tabella denominato TestTbl.

Se si ripetuti i quattro scenari con l'utente ale, tutti i sarā lo stesso. Tuttavia, immettere Impossibile passare ulteriori e modificare la struttura della tabella e i dati anche. Č importante ricordare prima selezionato gruppo analisti e revocare tutte le autorizzazioni. Quindi aggiunto nuovamente tutte le autorizzazioni per la presentazione, ma solo lettura dati e definizioni di lettura sono stati aggiunti di nuovo Bob.

Nota: Il gruppo di amministratori ha un significato speciale in relazione alla sicurezza. Questo vale per qualsiasi utente in tale gruppo. SID del gruppo Admins memorizzato nel SYSTEM.MDA quando viene creato un database. Di conseguenza, il gruppo amministratori avrā sempre dell'autorizzazione per modificare le autorizzazioni su tutti gli oggetti nel database. Impossibile eseguire questa autorizzazione stoccaggio da chiunque. Questa autorizzazione rimane anche quando tutte le autorizzazioni sono stati revocati dal gruppo di amministratori e non č visualizzato nella finestra di dialogo autorizzazioni. Si tratta di un altro motivo per mantenere una copia di backup e di tenere traccia di cui SYSTEM.MDA č in uso quando č stato creato il database.

Con l'opzione OwnerAccess in una query SQL


Un ultimo punto di confusione č incentrata l'utilizzo della seguente frase in una query SQL:
   ... With OwnerAccess Option
				

Ad esempio, č simile a questo codice:
   Sub Form_Load ()
      Dim db As Database
      Dim qd As querydef

      Set db = OpenDatabase("C:\ACCESS\DB1.MDB")

      ' Enter the following two lines of code as one, single line:

      Set qd = db.CreateQueryDef("myQD", "select * from [TableDetails]
         with owneraccess option ;")
      db.Close
   End Sub
				

Questo codice genera questo errore:
ID di database non valido.

Infatti, OwnerAccess si intende il proprietario del database. Il proprietario č l'autore del database. In altre parole, OwnerAccess si riferisce a e la password utente combinazione del proprietario (univoco SID) che č memorizzato nel database (BD1.MDB in questo caso). Tuttavia, il codice non contiene le due istruzioni necessarie per selezionare il file SYSTEM.MDA di un database protetto. In realtā, in questo caso, solo l'istruzione SetDefaultWorkspace č essenziale se il file .ini del file exe compilato di trasmissione contenente una sezione [Options] valida, sia nella directory \Windows.

Il codice utilizza il backdoor. Non č fornito il SID univoco del proprietario del database al motore di, in modo che il modulo di gestione non la combinazione di nome e password di predefinita (Admin, "") l'utente č il proprietario del database. Anche se si scopre che l'amministratore dell'utente č il proprietario di database, senza avere letto il file SYSTEM.MDA, il modulo di gestione non puō verificare che di fatto, in modo che fornisce l'errore.

Note per gli utenti di Microsoft Access versione 2.0

Utilizzando il rilasciato di recente Microsoft Jet 2.0 e Visual Basic 3.0 livello di compatibilitā, Visual Basic possono ottenere accesso ai database di Microsoft Access versione 2.0. Di seguito sono note che consentono di convertire un database protetto versione 1.1 in formato di Microsoft Access versione 2.0.

Se un database di versione 1.x č protetto, rimarrā sempre protetto se č possibile aprirlo con Microsoft Access versione 1.x o 2.0. Tuttavia, Microsoft Access versione 2.0 non utilizzabile per modificare o aggiungere autorizzazioni nel database, anche dall'amministratore, fino a quando il database viene convertito alla versione 2.0.

Quando si installa Microsoft Access versione 2.0, viene creato un proprio file di gruppo di lavoro (SYSTEM.MDA). Se nella stessa directory come versione 1.x č installato Microsoft Access versione 2.0, il file SYSTEM.MDA 1.x versione sarā rinominato SYSTEM1X.MDA.

Per apportare modifiche per la protezione di un database convertito, č necessario utilizzare una versione 2.0 SYSTEM.MDA con l'originale SYSTEM.MDA gruppi identici e degli utenti (e PID identici).

Nota: PID (ID personale) in Microsoft Access versione 2.0 sono l'equivalente di PIN (numeri di ID personale) nella versione 1.x

Per creare un gruppo di lavoro protetto:
  1. Utilizzare lo strumento di amministratore gruppi di lavoro 2.0 per creare un nuovo gruppo di lavoro. Si tratta di un file della versione 2.0 SYSTEM.MDA.
  2. Ricreare tutti gli utenti e gruppi di account utilizzando lo stesso nome e il PID numeri che sono stati utilizzati in Microsoft Access versione 1.x.
Per convertire un database di 1.x Secure formato 2.0:

Nota: In un gruppo di lavoro protetto, solo gli utenti con autorizzazioni Modify Design a tutti gli oggetti possono convertire un formato di versione 1.x in formato versione 2.0. Inoltre, č necessario assegnare autorizzazioni Modify Design al database versione 1.x di Microsoft Access versione 1.x utilizzando il gruppo di lavoro versione 1.x.
  1. Assicurarsi di che non stia utilizzando il database di versione 1.x.
  2. Accedere a Microsoft Access 2.0 come membro del gruppo amministratori che non č l'utente Admin.
  3. Scegliere il comando Converti Database dal menu file.
  4. Selezionare il database di versione 1.x che si desidera convertire. Verrā chiesto il nome di versione 2.0.

    Nota: Il comando Converti Database forzerā č possibile scegliere un nuovo nome per il database. Questo consente di tenere una copia di backup della versione 1.x database, come una volta convertito un database dalla versione 1.x alla versione 2.0 che č non puō riconvertire in versione 1.x.
  5. Gli utenti rivolgersi al nuovo gruppo di lavoro di versione 2.0 (SYSTEM.MDA) utilizzando lo strumento di amministratore gruppi di lavoro.

    Nota: Č possibile inoltre eseguire questa operazione modificando il file MSACC20.INI nella directory di Windows. Nella sezione [opzioni] del file, modificare la voce SystemDB per scegliere la versione 2.0 SYSTEM.MDA file. La sezione [Options] del file sarā simile nell'esempio riportato di seguito:
          [Options]
          SystemDB=<microsoft access path>\SYSTEM.MDA
    
    						

Importanti

  1. Creare e modificare il file SYSTEM.MDA solo in Microsoft Access.
  2. Il file SYSTEM.MDA contiene il SID univoco utilizzato in un database con autorizzazioni per ordinare che č che per il Microsoft Access motore per applicare le autorizzazioni. Viene ottenuto il SID fornendo il modulo di gestione di Microsoft Access con un utente valido e una combinazione di password, da cui viene ottenuto il SID univoco il modulo di gestione archiviati in memoria per applicare la protezione in un database aperto.
  3. Microsoft Access e Visual Basic necessario puntare al percorso di disattivare il file SYSTEM.MDA per ottenere la voce per il database con protezione e autorizzazioni implementati.
  4. Č disponibile una backdoor al programma di Visual Basic dell'applicazione se la password per l'impostazione predefinita l'utente nel gruppo amministratori (denominato Admin) non č cambiato dal valore predefinito Nessuno ("").
  5. Se la frase "Con opzione OwnerAccess" viene utilizzata nella query SQL di un metodo CreateQueryDef, CreateDynaset o CreateSnapshot, deve essere presente un puntatore al file SYSTEM.MDA. Anche se si utilizza il backdoor (combinazione predefinita e la password utente di amministrazione e "") e di non funzionano il SYSTEM.MDA, č necessario quando si utilizza "Con opzione OwnerAccess" in una query SQL, il modulo di gestione necessario vedere il file SYSTEM.MDA corrisponde il SID del proprietario del database per l'utente connesso (autore).
  6. Le combinazioni di utente e password di accesso valide sono memorizzate nel file SYSTEM.MDA ma le autorizzazioni vengono memorizzate nel database (mdb file) se stesso. Una chiave univoca (il SID) viene estratte dal SYSTEM.MDA utilizzando un utente valido e una combinazione di password, il modulo di gestione di Microsoft Access fornito tramite la finestra di dialogo accesso in Microsoft Access o il codice in Visual Basic.

Proprietā

Identificativo articolo: 105990 - Ultima modifica: domenica 2 febbraio 2014 - Revisione: 2.0
Le informazioni in questo articolo si applicano a:
  • Microsoft Visual Basic 3.0 Professional Edition
  • Microsoft Visual Basic 3.0 Professional Edition
Chiavi: 
kbnosurvey kbarchive kbmt kbinfo KB105990 KbMtit
Traduzione automatica articoli
Il presente articolo č stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non č sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pių o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non č la sua. Microsoft non č responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 105990
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com