# Tietoturva LightInventoryssa

> Missä tietosi ovat, mitä Google-käyttöoikeuksia pyydämme, miten kirjautuminen, roolit ja historia toimivat ja mitä palveluntarjoajia käytämme.

Source: https://www.lightinventory.com/fi/tietoturva · Last updated: 2026-10-30

Varastotietosi pysyvät omassa Google Sheets -taulukossasi. LightInventory lukee ja kirjoittaa tiedostoa puolestasi, ei säilytä kopiota sen sisällöstä palvelimillamme ja tallentaa vain sen, mitä tilisi ylläpito vaatii. Tällä sivulla kerrotaan tarkalleen, miten tämä toimii, mitä vastaan suojaamme ja missä rajat kulkevat.

> **Note:** LightInventory on kehitysvaiheessa eikä vielä yleisesti saatavilla. Tämä sivu kuvaa järjestelmää sellaisena kuin se on suunniteltu. Sivu ei väitä, että palvelulla olisi auditointeja, sertifiointeja tai käytettävyyshistoriaa, koska niitä ei vielä ole.

## Missä tietosi ovat

Liiketoimintatiedot (nimikkeet, sijainnit, varastotapahtumat, hinnat, huomautukset, hyväksyntäehdotukset sekä historiasi arvot ennen ja jälkeen) ovat vain Google-tilisi laskentataulukoissa. Palvelimemme lukevat solujen arvoja muistiin näyttääkseen sivuja, verratakseen muutoksia, muodostaakseen vientejä ja kirjoittaakseen päivityksesi. Näitä arvoja ei tallenneta tietokantaamme, lokeihimme eikä virheraportteihimme. Automaattinen testisarja tarkistaa, ettei mikään taulu, lokirivi tai virhetapahtuma sisällä solujen arvoja.

Tallennamme tiedot, joita tilisi ylläpito vaatii:

| Mitä tallennamme | Miksi | Suojaus |
|---|---|---|
| Käyttäjät, profiilit, organisaatiot, jäsenyydet, roolit, kutsut (vain kunkin kutsutunnuksen tiiviste) | Kirjautuminen ja tiimin hallinta | Tietokantapalvelun tarjoaja salaa ne levyllä |
| Kirjautumistekijät: pääsyavainten julkiset avaimet, TOTP-salaisuudet, tiivistetyt palautuskoodit | Monivaiheinen tunnistautuminen | TOTP-salaisuudet salataan lisäksi kirjekuorisalauksella avaimilla, joita säilytetään avaintenhallintapalvelussa |
| Yhdistetyn laskentataulukon Google-päivitystunnus (refresh token) | Tiedostosi lukeminen ja kirjoittaminen | Kirjekuorisalattu; sitä ei koskaan lähetetä selaimeen eikä kirjoiteta lokeihin |
| Laskentataulukon metatiedot: tiedostotunnus, välilehtien tunnukset, skeeman versio, lukitustila | Tiedostosi löytäminen ja tarkistaminen | Ei sisällä solujen arvoja |
| Rivien sormenjäljet (jokaisen rivin avaimella laskettu tiiviste) | Suoraan taulukkoon tehtyjen muokkausten havaitseminen | Avaimella laskettuja, joten niistä ei voi palauttaa arvoja |
| Kirjausketjun tiivisteet: järjestysnumerot, merkintöjen tunnukset, tiivisteet, tekijän tunnus, toiminnon tyyppi, aika | Sen todistaminen, että historiasi on muuttumaton | Ei sisällä arvoja |
| Maksupalveluntarjoajamme laskutusviitteet | Tilaukset ja laskut | Ei sisällä korttinumeroita |
| Tietoturvatapahtumat: kirjautumisyritykset, käyttöoikeusvirheet, IP-osoite, selain | Väärinkäytösten havaitseminen | IP-osoite poistetaan 90 päivän jälkeen, tapahtumat 1 vuoden jälkeen |

Oma järjestelmämme toimii **Lontoossa**. Tietokanta (Supabase, alue `eu-west-2`), sovelluspalvelimet (Vercel, alue `lhr1`) sekä salausavaimemme ja historian ankkurit (Google Cloud, alue `europe-west2`) on kaikki kiinnitetty sinne. Ainoa dokumentoitu poikkeus on tapahtumapohjainen sähköposti, josta kerrotaan kohdassa [infrastruktuuri ja alikäsittelijät](#infrastruktuuri-ja-alikäsittelijät).

## Pyytämämme Google-käyttöoikeudet

LightInventory pyytää Googlelta kahta asiaa. Kun kirjaudut Googlella, se pyytää perusprofiilisi: `openid`, `email` ja `profile`. Kun yhdistät laskentataulukon, se pyytää erikseen yhden Drive-käyttöoikeuden, `drive.file`.

Selkokielellä `drive.file` antaa sovelluksen käsitellä vain tiedostoja, jotka luot sillä tai valitset sille. Google kuvaa sitä pääsyksi tiedostoihin, ”jotka avaat sovelluksella tai jotka käyttäjä jakaa sovellukselle Google Picker API:n avulla” ([Google Drive API:n käyttöalueet](https://developers.google.com/workspace/drive/api/guides/api-specific-auth?hl=fi)). Google luokittelee sen ei-arkaluonteiseksi käyttöalueeksi.

Mitä tämä tarkoittaa sinulle:

- LightInventory ei voi listata, avata eikä hakea muuta Google Driveasi. Tiedosto, jota et ole koskaan luonut LightInventorylla tai valinnut Googlen tiedostonvalitsimessa, on sille näkymätön.
- Emme koskaan pyydä laajempaa `spreadsheets`-käyttöaluetta tai mitään koko Driven kattavaa käyttöaluetta.
- Jokaisen myönnön jälkeen tarkistamme, että Google palautti täsmälleen pyytämämme käyttöoikeuden.
- Voit poistaa käyttöoikeuden milloin tahansa Google-tililtäsi. Katso [Peru LightInventoryn Google-käyttöoikeus](/fi/ohje/tiedot-ja-tietosuoja/peru-google-kayttooikeus).

Vain laskentataulukon yhdistävä henkilö myöntää tämän käyttöoikeuden, ja hänen on omistettava tiedosto. Tiimisi jäseniä ei koskaan lisätä tiedostoon Googlessa. He työskentelevät sovelluksen kautta heille antamiesi roolien mukaan.

## Kirjautuminen ja istunnot

Jokainen käyttäjä kirjautuu kahdella tekijällä, kaikissa paketeissa, aina kun istunto alkaa.

1. **Ensimmäinen tekijä:** Google-kirjautuminen tai sähköposti ja salasana. Salasanoissa on oltava vähintään 12 merkkiä, ja ne tarkistetaan vuotaneiden salasanojen luetteloita vasten. Google-kirjautuminen lasketaan vain ensimmäiseksi tekijäksi, ei koskaan molemmiksi.
2. **Toinen tekijä:** pääsyavain, joka on oletus ja kestää tietojenkalastelua, tai todennussovelluksen TOTP-koodi. Jokainen käyttäjä ottaa käyttöön vähintään kaksi tapaa ja saa 10 kertakäyttöistä palautuskoodia.

Omistajilta ja Järjestelmänvalvojilta edellytetään oletuksena tietojenkalastelua kestävää kirjautumista, joten TOTP on näiltä rooleilta pois käytöstä, ellei omistaja muuta asetusta. Laitteistopohjaiset suojausavaimet toimivat pääsyavaimina. Sähköpostilinkillä voi nollata salasanan, mutta se ei koskaan korvaa toista tekijää.

Monivaiheinen tunnistautuminen tarkistetaan kahdessa toisistaan riippumattomassa paikassa: palvelinkoodissamme ja tietokannan omissa käyttösäännöissä. Istunto, joka on läpäissyt vain ensimmäisen tekijän, ei voi lukea mitään, vaikka se kutsuisi tietokantaa suoraan.

| Istuntoasetus | Arvo |
|---|---|
| Uloskirjaus käyttämättömyyden jälkeen | 60 minuuttia |
| Istunnon enimmäiskesto | 24 tuntia |
| Uusi toinen tekijä arkaluonteisiin toimintoihin | Viimeisten 5 minuutin aikana |
| Epäonnistuneet toisen tekijän yritykset ennen lukitusta | 10, viiveet 30 sekunnista 1 tuntiin |

Arkaluonteisia toimintoja ovat roolien muutokset, laskutuksen muutokset, laskentataulukon yhdistäminen tai yhteyden katkaiseminen, viennit, joukkoperumiset, kirjautumistapojen muutokset ja organisaation poistaminen. Näet aktiiviset istuntosi ja voit lopettaa minkä tahansa niistä. Lähetämme sinulle sähköpostia, kun uusi laite kirjautuu, kun kirjautumistapa lisätään tai poistetaan ja kun palautuskoodeja käytetään.

## Roolit, sijainnit ja hyväksynnät

Jokaisessa organisaatiossa on viisi roolia: Omistaja, Järjestelmänvalvoja, Hyväksyjä, Muokkaaja ja Katselija. Muokkaajat ja Katselijat voidaan rajata tiettyihin sijainteihin, jolloin myymälän tiimi näkee ja muuttaa vain omaa varastoaan.

| Oikeus | Omistaja | Järjestelmänvalvoja | Hyväksyjä | Muokkaaja | Katselija |
|---|---|---|---|---|---|
| Nimikkeiden, saldojen ja historian katselu | Kyllä | Kyllä | Kyllä | Omat sijainnit | Omat sijainnit |
| Tapahtumien kirjaaminen | Kyllä | Kyllä | Kyllä | Omat sijainnit | Ei |
| Pyyntöjen hyväksyminen | Kyllä | Kyllä | Kyllä, ei omiaan | Ei | Ei |
| Joukkoperuminen | Kyllä | Kyllä | Ei | Ei | Ei |
| Jäsenten hallinta | Kyllä | Kyllä | Ei | Ei | Ei |
| Laskentataulukon yhdistäminen, organisaation poistaminen | Kyllä | Ei | Ei | Ei | Ei |

Käyttöoikeudet luetaan reaaliajassa jokaisen pyynnön yhteydessä, joten henkilön poistaminen tai hänen roolinsa muuttaminen tulee voimaan hänen seuraavassa toiminnossaan. Jokainen pyyntö hylätään, ellei jokin sääntö salli sitä. Jokainen rooli kuvataan artikkelissa [Tiimi ja roolit](/fi/ohje/tiimi-ja-roolit).

Hyväksynnät ovat valinnaisia. Kun ne ovat käytössä, organisaatio voi vaatia hyväksynnän esimerkiksi hinnanmuutoksille tai saldokorjauksille. Ehdotettu muutos kirjoitetaan suojatulle välilehdelle laskentataulukossasi, eikä kukaan voi hyväksyä omaa pyyntöään. Lue lisää [muutoshistorian](/fi/ominaisuudet/muutoshistoria) esittelystä.

## Historia, jonka peukalointi paljastuu

Jokainen LightInventoryn kautta tehty muutos kirjoitetaan historiamerkintänä suojatulle `Log`-välilehdelle laskentataulukossasi, samassa Google-päivityksessä kuin itse muutos. Saldoa ei koskaan muokata lukuna. Se lasketaan tapahtumaluettelosta, johon vain lisätään rivejä, ja peruminen on uusi, vastakkainen merkintä eikä poisto.

Peukaloinnin paljastuminen tarkoittaa, että jos joku muuttaa tai poistaa aiemman merkinnän, tarkistus näyttää sen. Se ei tarkoita, että muutos olisi mahdoton. Näin se toimii:

- **Avaimella suojattu ketju.** Jokainen merkintä saa koodin, joka lasketaan sen sisällöstä ja edellisen merkinnän koodista käyttäen HMAC-SHA256:ta ja organisaatiosi salaista avainta, joka on vain LightInventoryn hallussa. Yhden merkinnän muuttaminen rikkoo ketjun siitä kohdasta eteenpäin. Koska avain on salainen, kukaan ei voi muokkauksen jälkeen laskea koodeja huomaamattomasti uudelleen.
- **Kopio ketjusta ilman arvoja.** Säilytämme ketjun koodit, emme koskaan arvojasi, tietokantataulussa, joka hylkää päivitykset ja poistot.
- **Päivittäiset ankkurit tietokantamme ulkopuolella.** Kerran päivässä yksi sormenjälki kaikkien organisaatioiden viimeisimmästä ketjun kohdasta kirjoitetaan Google Cloud Storage -säilöön, jossa on 7 vuoden lukittu säilytyskäytäntö. Kun käytäntö on lukittu, sitä ei voi lyhentää eikä poistaa. Hyökkääjä, joka pystyisi muuttamaan tietokantaamme, ei silti voisi kirjoittaa näitä ankkureita uudelleen.
- **Yöllinen tarkistus.** Joka yö ja aina omistajan pyynnöstä laskemme ketjun uudelleen `Log`-välilehdeltäsi ja vertaamme sitä kopioomme ja viimeisimpään ankkuriin. Jos jokin ei täsmää, jokainen jäsen näkee eheysvaroituksen, ja Omistaja ja Järjestelmänvalvojat saavat sähköpostin.

Raja on omistajuus. Google-tiedoston omistaja voi aina muokata, avata lukituksen, kopioida tai poistaa sen; Google ei salli kenenkään sulkemista pois. Ketju ei voi estää sitä, mutta se tekee sen näkyväksi. Google myös kirjaa sovelluksemme kirjoitukset omistajan tilin nimiin, koska kirjoitamme omistajan luvalla. Oma `Log`-välilehtemme kirjaa todellisen tiimin jäsenen.

## Suoraan taulukkoon tehdyt muokkaukset

Oletuksena hallitut välilehtesi on suojattu niin, että vain omistaja voi muokata niitä Google Sheetsissä, eivätkä tiedoston muokkaajat voi jakaa sitä eteenpäin. Valinnainen tiukka lukitus tekee tiedostosta Googlessa vain luku -tilaisen, kunnes omistaja tarkoituksella avaa lukituksen.

Koska omistaja voi aina tehdä muutoksia, LightInventory myös havaitsee ne. Aina kun sovellus lukee taulukkoasi, se vertaa jokaista riviä tallennettuun sormenjälkeen. Taustatarkistus ajetaan myös organisaatioille, joita kukaan ei parhaillaan katso. Kun rivi on muuttunut sovelluksen ulkopuolella, sovellus kirjaa sen ja liittää siihen parhaan mahdollisen tekijätiedon Googlen versiotiedoista, ja soveltaa sitten organisaatiosi käytäntöä: muutos estetään, kunnes Omistaja tai Järjestelmänvalvoja hyväksyy sen tai palauttaa aiemman tilan, muutos hyväksytään ja kirjataan, tai se jätetään odottamaan hyväksyntää. Muokkaukset aiempiin tapahtumiin tai historiamerkintöihin merkitään aina.

## Salaus ja salaisuudet

- **Siirrossa:** kaikki liikenne käyttää HTTPS:ää. Selaimia ohjeistetaan käyttämään vain HTTPS:ää (HSTS ja preload), ja sivuillamme on tiukka Content Security Policy.
- **Levyllä:** tietokantapalvelun tarjoaja salaa tietokantamme levyllä. Google tallentaa ja salaa laskentataulukkosi.
- **Tunnukset ja avaimet:** Googlen päivitystunnukset, TOTP-salaisuudet ja jokaisen organisaation historia-avaimet salataan AES-256-GCM:llä käyttäen jokaiselle tietueelle uutta avainta. Tämä avain puolestaan suojataan Lontoossa sijaitsevan Google Cloud KMS:n pääavaimella, joka ei koskaan poistu KMS:stä ja joka vaihdetaan vuosittain. KMS toimii erillisessä pilviprojektissa omine käyttöoikeuksineen, ja palvelimemme käyttävät sitä ilman tallennettuja pitkäikäisiä tunnistetietoja.
- **Tuella ei ole pääsyä taulukkoosi.** Henkilökunnallamme ei ole toimintoa, jolla kirjautua sinuna, eikä tukityökalua, joka avaisi laskentataulukkosi. Pääsy tuotantotietokantaamme vaatii kaksi henkilöä ja kirjataan.

## Infrastruktuuri ja alikäsittelijät

| Palveluntarjoaja | Tehtävä | Alue |
|---|---|---|
| Supabase | Tietokanta ja tunnistautuminen (vain järjestelmätiedot) | Lontoo (`eu-west-2`) |
| Vercel | Sovelluksen hosting ja palomuuri; sisällönjakeluverkko | Funktiot Lontoossa (`lhr1`); maailmanlaajuinen CDN |
| Google Cloud | Avaintenhallinta ja historian ankkurit (vain järjestelmätiedot) | Lontoo (`europe-west2`) |
| Resend | Tapahtumapohjainen sähköposti (kutsut, tietoturva- ja laskutusilmoitukset) | Yhdysvallat |
| Stripe | Laskutus ja maksut | Ei kiinnitetty alueeseen |
| Cloudflare | DNS ja DNSSEC sekä kirjautumislomakkeiden CAPTCHA | Maailmanlaajuinen verkko |

Googlen Sheets- ja Drive-rajapinnat käsittelevät laskentataulukkoasi omana palveluntarjoajanasi. Lähettämämme sähköpostit eivät koskaan sisällä varastotietojasi. Yhdysvalloissa toimivien palveluntarjoajien osalta tiedonsiirrot perustuvat EU:n ja Yhdysvaltojen väliseen tietosuojakehykseen (Data Privacy Framework) ja sen Yhdistyneen kuningaskunnan laajennukseen tai vakiosopimuslausekkeisiin.

Tietojenkäsittelysopimuksemme on suunniteltu antamaan asiakkaille vähintään 30 päivän ennakkoilmoitus uudesta alikäsittelijästä ja oikeus vastustaa sitä. Täydellinen alikäsittelijäluettelo ja sopimus julkaistaan palvelun avautuessa.

## Haavoittuvuuden ilmoittaminen

Jos löydät tietoturvaongelman, lähetä sähköpostia osoitteeseen **support@lightinventory.com** ja kerro, miten ongelman voi toistaa. Älä käytä muiden ihmisten tietoja tai häiritse palvelua, ja ota meihin yhteyttä ennen aktiivista testausta, koska käyttöehtomme eivät salli tietoturvatestausta ilman lupaa. Yhteystietomme tietoturvatutkijoille on julkaistu myös koneluettavassa muodossa tiedostossa [security.txt](/.well-known/security.txt). Täydellinen vastuullisen ilmoittamisen käytäntö julkaistaan ennen palvelun avautumista.

## Tilanne

LightInventory valmistautuu julkaisuun. Ennen julkaisua suunnitelmaan kuuluu ulkoinen tunkeutumistestaus, joka kattaa kirjautumisen, asiakkaiden välisen eristyksen, Google-valtuutuksen, webhookit ja laskentataulukkoinjektiot, sekä täydellinen itsearviointi OWASP Application Security Verification Standard 5.0 -standardia vasten. Tälle sivulle lisätään nämä riippumattomat arvioinnit, kun ne ovat olemassa. Siihen asti sivu kuvaa suunnittelua, ei sertifiointia.

Täydellinen luettelo on artikkelissa [mitä LightInventory tallentaa](/fi/ohje/tiedot-ja-tietosuoja/mita-tallennamme), ja kunkin paketin sisältö on [hinnoittelusivulla](/fi/hinnoittelu).
