surrogato vs. chiavi naturali / aziendali
<p>eccoci di nuovo, la vecchia discussione sorge ancora ...</p><p>dovremmo avere una chiave di business come chiave primaria o preferiremmo avere un id surrogato (ovvero un'identità di sql server) con un vincolo univoco sul campo della chiave di business?</p><p>fornisci esempi o prove a supporto della tua teoria.</p>
<p>tutti e due. prendi la tua torta e mangiala.</p><p>ricorda che non c'è nulla di speciale in una chiave primaria, tranne che è etichettata come tale. non è altro che un vincolo not null unique e una tabella può avere più di uno.</p><p>se si utilizza una chiave surrogata, si desidera comunque una chiave aziendale per garantire l'univocità in base alle regole aziendali.</p>
<p>ssl e ssh forniscono entrambi gli elementi crittografici per costruire un tunnel per il trasporto di dati riservati con integrità controllata. per quella parte, usano tecniche simili e possono soffrire dello stesso tipo di attacchi, quindi dovrebbero fornire una sicurezza simile (cioè una buona sicurezza) supponendo che siano entrambi correttamente implementati. che entrambi esistano è una specie di <a href="http://en.wikipedia.org/wiki/not\_invented\_here"> nih </a> sindrome: gli sviluppatori ssh avrebbero dovuto riutilizzare ssl per la parte del tunnel (il protocollo ssl è abbastanza flessibile da accogliere molte varianti, incluso il non utilizzo dei certificati).</p><p>differiscono sulle cose che si trovano intorno al tunnel. ssl utilizza tradizionalmente i certificati x.509 per annunciare le chiavi pubbliche del server e del client; ssh ha il suo formato. inoltre, ssh viene fornito con una serie di protocolli per ciò che va <em> all'interno del tunnel </em> (multiplexing di diversi trasferimenti, esecuzione dell'autenticazione basata su password all'interno del tunnel, gestione dei terminali. ..) mentre non esiste nulla di simile in ssl o, più precisamente, quando tali elementi vengono utilizzati in ssl non vengono considerati parte di ssl (ad esempio, quando si esegue l'autenticazione http basata su password in un tunnel ssl, noi dire che fa parte di "https", ma funziona davvero in un modo simile a quello che succede con ssh).</p><p>concettualmente, potresti prendere ssh e sostituire la parte del tunnel con quella di ssl. potresti anche prendere https e sostituire la cosa ssl con ssh con trasporto dati e un hook per estrarre la chiave pubblica del server dal suo certificato. non vi è alcuna impossibilità scientifica e, se eseguita correttamente, la sicurezza rimarrebbe la stessa. tuttavia, non esiste un insieme diffuso di convenzioni o strumenti esistenti per questo.</p><p>quindi non usiamo ssl e ssh per le stesse cose, ma questo è dovuto a quali strumenti sono stati storicamente forniti con le implementazioni di quei protocolli, <em> non </em> a causa di un differenza relativa alla sicurezza. e chiunque implementi ssl o ssh sarebbe ben consigliato di esaminare che tipo di attacchi sono stati provati su entrambi i protocolli.</p> <p>hai ragione che ssl utilizza una coppia di chiavi asimmetrica. viene generata una chiave pubblica e una privata, nota anche come infrastruttura a chiave pubblica (pki). la chiave pubblica è ciò che viene distribuito al mondo e viene utilizzata per crittografare i dati. tuttavia, solo la chiave privata può effettivamente decrittografare i dati. ecco un esempio:</p><blockquote> <p>supponiamo che entrambi andiamo su walmart.com e compriamo cose. ognuno di noi ottiene una copia della chiave pubblica di walmart con cui firmare la transazione. una volta che la transazione è firmata dalla chiave pubblica di walmart, solo la chiave privata di walmart può decrittografare la transazione. se uso la mia copia della chiave pubblica di walmart, <strong> non </strong> decifrerà la transazione. walmart deve mantenere la propria chiave privata molto privata e sicura, altrimenti chiunque lo ottenga può decifrare le transazioni su walmart. questo è il motivo per cui <a href="https://en.wikipedia.org/wiki/diginotar#issuance\_of\_fraudulent\_certificates">diginotar breach</a> è stato un grosso problema</p> </blockquote><p>ora che hai l'idea delle coppie di chiavi pubbliche e private, è importante sapere chi emette effettivamente il certificato e perché i certificati sono affidabili. lo sto semplificando troppo, ma ci sono specifiche autorità di certificazione radice (ca) come verisign che firmano certificati, ma firmano anche per le ca intermedie. questo segue quella che viene chiamata chain of trust, che è una catena di sistemi che si fidano reciprocamente. vedere l'immagine collegata di seguito per avere un'idea migliore (notare che la ca principale è in fondo).</p><p><img src="https://i.stack.imgur.com/q28zw.png" alt="simple chain of trust"></p><p>le organizzazioni acquistano spesso certificati con caratteri jolly o vengono registrate come ca intermedie stesse autorizzate a firmare solo per il proprio dominio. ciò impedisce a google di firmare certificati per microsoft.</p><p>a causa di questa catena di fiducia, un certificato può essere verificato fino alla ca principale. per dimostrarlo, digicert (e molti altri) dispongono di strumenti per verificare questa fiducia. lo strumento di digicert è collegato <a href="http://www.digicert.com/help/">qui</a> . ho fatto una convalida su gmail.com e quando scorri verso il basso mostra questo:</p><p><img src="https://i.stack.imgur.com/6fgrc.jpg" alt="certificate of trust for gmail"></p><p>ciò dimostra che il certificato per gmail.com è emesso da google internet authority g2, che a sua volta ha rilasciato un certificato da geotrust global, che a sua volta ha rilasciato un certificato da equifax.</p><p>ora, quando vai su gmail.com, il tuo browser non si limita a ottenere un blob di hash e continua. no, ottiene tutta una serie di dettagli insieme al certificato:</p><p><img src="https://i.stack.imgur.com/kl7z1.jpg" alt="google public cert details"></p><p>questi dettagli sono ciò che il tuo browser utilizza per aiutare a identificare la validità del certificato. ad esempio, se la data di scadenza è trascorsa, il browser genererà un errore di avviso. se tutti i dettagli di base del certificato vengono verificati, verrà verificato fino alla ca principale, che il certificato è valido.</p><p>ora che hai un'idea migliore dei dettagli del certificato, questa immagine espansa simile alla prima sopra avrà più senso:</p><p><img src="https://i.stack.imgur.com/gbz21.gif" alt="certificate chain of trust expanded"></p><p>questo è il motivo per cui il browser può verificare un certificato rispetto al successivo, fino alla ca principale, di cui il browser si fida intrinsecamente.</p><p>spero che questo ti aiuti a capire un po 'meglio!</p> È necessario modificare in `"Data Source=./data/database/sqlite.db"` 

 `"DefaultConnection": "DataSource=./data/database/sqlite.db"` secondo me, conviene andare sul sito ufficiale e prendere il numero. <p><strong>divulgazione</strong>: lavoro per uno dei fornitori che partecipano a nomoreransom.</p><p>la maggior parte dei ransomware moderni implementa effettivamente una corretta crittografia. le versioni precedenti utilizzavano <code>rand()</code> per la generazione di chiavi, seminando i generatori casuali con varianti di <code>time()</code> - ecco perché era importante che la decrittazione riuscisse a sapere quando si è verificata esattamente l'infezione; idealmente fino a pochi minuti. quelli potrebbero essere decifrati con forza bruta. ma la maggior parte dei ransomware moderni utilizza effettivamente l'api crypto di windows o le librerie crittografiche in bundle.</p><p>tuttavia, indipendentemente dalla corretta implementazione del ransomware, c'è sempre un punto debole: per facilitare la decrittazione, le chiavi devono essere archiviate da qualche parte. questo luogo potrebbe essere rintracciato dalle compagnie di sicurezza, che collaborerebbero con le forze dell'ordine per prenderne il controllo. l'accesso al server offre alla società di sicurezza la possibilità di decrittografare i file delle vittime del ransomware. questo è ad esempio il caso del ransomware gangcrab.</p> <p>quando il server invia il proprio certificato al client, in realtà invia una <em> catena di certificati </em> in modo che il client trovi più facilmente la convalida del certificato del server (il client è non <em> richiesto </em> per usare esattamente quella catena, ma, in pratica, la maggior parte dei client utilizzerà la catena e nessun altro). questo è descritto nel <a href="http://tools.ietf.org/html/rfc5246">standard ssl/tls</a> , sezione 7.4.2, con, in particolare, questo estratto illuminante:</p><blockquote> <p>il certificato del mittente deve essere il primo nell'elenco. ogni certificato seguente deve certificare direttamente quello che lo precede. poiché la convalida del certificato richiede che le chiavi radice vengano distribuite in modo indipendente, il certificato autofirmato che specifica l'autorità di certificazione radice puo 'essere omesso dalla catena, presupponendo che l'estremità remota debba già possederla per convalidarla in ogni caso.</p> </blockquote><p>poiché si tratta di un caso "maggio" (la terminologia "maggio", "deve", "dovrebbe" ... in rfc ha significati molto precisi spiegati in <a href="http://tools.ietf.org/html/rfc2119">rfc 2119</a> ), al server è consentito includere il certificato radice (noto anche come "trust anchor") nella catena o ometterlo. alcuni server lo includono, altri no. un'implementazione client tipica, intesa a utilizzare esattamente la catena che è stata inviata, proverà innanzitutto a trovare i certificati della catena nel suo negozio di fiducia; in caso contrario, tenterà di trovare un <em> emittente </em> per l '"ultimo" certificato della catena nel suo negozio di fiducia. quindi, in entrambi i casi, questo è conforme agli standard e dovrebbe funzionare.</p><p>(esiste una piccola fonte di confusione riguardo all'ordine della catena. in verità <a href="http://tools.ietf.org/html/rfc5280">x.509</a> , la catena viene ordinata dall'ancoraggio di fiducia al certificato dell'entità finale. il messaggio "certificato" ssl/tls è codificato in ordine inverso, il certificato dell'entità finale, che qualifica il server stesso, arrivando per primo. qui sto usando "last" nella terminologia ssl/tls, non x.509.)</p><p>l'unica cosa negativa che si può dire sull'invio del root nella catena è che usa inutilmente un po 'di larghezza di banda della rete. sono circa 1 kb di dati per connessione <em> che include una stretta di mano completa </em>. in una sessione tipica tra un client (browser web) e un server, solo una connessione sarà di quel tipo; le altre connessioni dal client useranno "handshake abbreviati" che si basano sull'handshake iniziale e non usano affatto i certificati. e ogni connessione sarà mantenuta attiva per molte richieste http successive. quindi l'overhead di rete implicato nell'invio di root è leggero.</p> Esistono alcune implementazioni della migrazione per SQLite. 

 <https://github.com/bubibubi/db2ef6migrations> si basa sulla nuova interfaccia di migrazione EF6 ma presenta alcune restrizioni. È possibile scaricarlo da Nuget alla ricerca di System.Data.SQLite.EF6.Migrations Vado con [il consiglio di Shawn Wildermuth](https://app.pluralsight.com/library/courses/aspdotnetcore-implementing-securing-api/discussion) che ho trovato su Pluralsight: 


>  OData significa che le query sono sul client in modo tale che i **servizi OData di versioning divengano rischiosi** e sembra che la **SM si stia allontanando da essa,** quindi non ho fiducia nemmeno sulla redditività a lungo termine di esso. 
> 
> # per evitare sovraccarichi i server accettano pochissimi id bassi, perciò rischiate di non trovare posto. infatti un id alto non puo' iniziare ad inviare direttamente i dati ad un id basso perchè la porta è bloccata. deve prima chiedere al server dove l'id basso è collegato di informarlo che qualcuno vuole inviargli dati. sarà l'id basso quindi a iniziare la comunicazione con noi chiedendoci di darlo scaricare.
# chi ha un id basso non può mai collegarsi con altri id bassi, (e quindi le uniche fonti possibili sono quelle con id alto) perciò potrà contare su un numero minore di fonti e scaricherà più piano.
# un id basso può dare file solo agli utenti con id alto collegati allo stesso server (non cambiate server perchè automaticamente cancellerete tutti gli utenti attuali dalla vostra coda!!) ciò è negativo se uno deve iniziare a diffondere un nuovo file.
# le fonti con id basso non vengono diffuse attraverso lo scambio fonti di emule perchè tanto non potrebbero essere utilizzate dagli utenti collegati a server diversi dal proprio >  esiste un modo per caricare la proprietà della chiave di navigazione come entity-framework (lazy-loading)? 
> 
> 

 No, Dapper è una libreria SQL diretta, ed è per questo che è così incredibilmente veloce. Non vi è alcun sovraccarico che circonda il carico automatizzato. È tuttavia possibile caricare più di un'entità alla volta. 


>  qual è la differenza tra serializzazione POCO e serializzazione dinamica? che è migliore? e come posso usare questa serializzazione? 
> 
> 

 La serializzazione POCO è più efficiente perché il tipo è ben noto in fase di compilazione, la serializzazione dinamica è un po 'più costosa perché deve essere valutata in fase di esecuzione. Oltre a questo non c'è davvero una differenza. 

 Tuttavia, consiglierei Dapper al di sopra di ***tutte le altre*** librerie ovunque. È semplice, veloce ed estremamente flessibile. E credetemi, ho usato molti framework e librerie per l'accesso ai dati. 

 [Documentazione Dapper](https://github.com/StackExchange/dapper-dot-net) 

 Dai un'occhiata a **Multi Mapping** e **Multiple Results**