Ulike DBMSer Mest kjente: Oracle PostGreSQL* MySQL* SQLServer* DB2 SQLite Access (DBMS og utv. verktøy i ett) osv *Skal benyttes i kurset. Tom Heine Nätt / Edgar Bostrøm
Hva er likt for disse (De fleste vel og merke) SQL Relasjonsdatabaser Tjenester Backup Adgangskontroll Logging Osv
Hva skiller DBMSer Pris (Åpen kildekode) Hastighet Kapasitet Distribuerte systemer Sikkerhet Tilleggsfunksjonalitet Verktøy Hvordan man gjør ting (spesielt som administrator) Supportavtaler
God oversikt over noen forskjeller http://troels.arvin.dk/db/rdbms/
Kort intro til MySQL/SQLServer og litt om andre systemer
MySQL Gratis Svenskprodusert (vel i starten) Mange plattformer Fokuserer (fokuserte) på hurtighet fremfor andre ting Før hadde den ikke engang PK/FK Så godt som standard med PHP Basert på tekstlig brukergrensesnitt Men har grafiske grensesnitt som tillegg Klienten startes med: mysql u <brukernavn> [ h <maskinnavn>] -p
MySQL Spesialiteter SHOW SHOW DATABASES SHOW TABLES [FROM <databasenavn>] SHOW COLUMNS FROM <tabellnavn> Eller: DESCRIBE <tabellnavn> SHOW CREATE TABLE <tabellnavn> Mange ulike typer tabeller (tabellmotorer) MyISAM, InnoDB,MEMORY, BLACKHOLE, EXAMPLE, ARCHIVE, CSV Kommer vi tilbake til \? og HELP kommandoen HELP <kommando> Ulike kommandolinjeverktøy \G til slutt i en select
MySQL artighet Parameteret --i-am-a-dummy UPDATE/DELETE må ha en WHERE (eller slå av «safe update») SELECT fra en tabell: max 1000 SELECT fra flere tabeller: max 1000000
MS SQLServer Opprinnelig DBMS et Sybase, Microsoft kjøpte rettighet til bruk og videreutvikling av sin variant. Sybase eksisterer fremdeles. Microsoft-ting Følger dårlig standarder Tendens til å være litt overdimensjonert Baserer seg på grafisk og brukervennlig grensesnitt Finnes i både kostbar og gratisversjon Så godt som standard i alle.net applikasjoner Veldig god XML-støtte Inneholder masse greier Analysis service Report generator Ligger på donau.hiof.no\cd_image --? Rotbrukeren heter sa (systemadministrator)
PostgeSQL Videreutvikling av Ingres Utviklet ved University of California at Berkeley (UCB). Open Source God på OO-utvidelser Triggere kan skrives i vilkårlig språk
Oracle Verdens mest brukte DBMS «Tungt», men finnes i mange varianter Commitment til «alle» operativsystemer Godt utbygd ORDBMS-del, men brukes lite Oracle Inc. har tatt over Sun, OpenOffice, mysql Men: hva har skjedd etterpå? Mye tilleggssoftware, f.eks. Financials, Prosjektstyring, se f.eks. http://www.oracle.com/no/index.html.
Databaseadministrasjon NB! Alt heretter om DB-admin vises i MYSQL, om ikke annet er sagt. (men det meste fungerer i andre systemer også)
Installasjon av DBMS Ikke helt rett frem Vær klar over: 2 hoved-komponenter: Server og klient Opptil flere services(tjenester) Velge servicename Systemkontoer (tjenestene skal kjøre som) Passord rotbruker Porter ( benytt standard) Mye tekniske spørsmål Se manualen/nettet Tegnsett Arkitektur/Struktur Husk å installere klient/tjener (ofte valg i installasjonen) Lisenser En maskin/mange maskiner osv Prosseseringskraft/ytelse Bruksområde There is never enough time to do it right, but always enough time to do it twice.
Typisk arkitektur Kan evt. referere til objekter i andre skjemaer, men må da prefikses,.-notasjon.
Prosjektservere i kurset: virtuelle maskiner 158.39.163.151-164 for maskinene db-1 til db-15 Velg deres maskin ut i fra gruppenummer som dere får på kurssiden etter å ha registrert dere Passord er blankt. Husk å endre Brukernavn Administrator Benytt Remote Desktop
Roller i et DB-System Data Administrator (DA) - Ansvar for dataene (på et teoretisk nivå) Database Administrator (DBA) - Ansvar for å holde databasen gående ( på et fysisk nivå) Database Designers Application Developers End-Users
Databaseadministrasjon Flere jobber: Opprette DB Opprette brukere Sette rettigheter Sette indekser Osv. Inneholder også databasedrifting Backup Logging Osv.
Opprette DB CREATE DATABASE <databasenavn> CREATE DATABASE <databasenavn> CHARACTER SET 'utf8' DROP DATABASE <databasenavn>
Brukere/rettigheter
Brukeradministrasjon 2 aspekter! Hvem skal få koble til og hvordan? Autentisering Hva skal de få gjøre? Privilegier/Accesskontroll
Opprette/Fjerne Brukere Tenk gjennom hvile brukere vi trenger Kommer tilbake til dette Litt spesielt: En bruker identifiseres med brukernavn og host F.eks tomhnatt@localhost tomhnatt@158.36.132.145 tomhnatt@ % tomhnatt@ %.hiof.no SQLServer (mf.) har også andre Authentication Modes Windows Login / Active directory, Kerberos osv. Unngå root-brukeren! Lag admin til hver DB Kun lokal!
Klient /Server Klient Klient Server tomhnatt@localhost (drossap) tomhnatt (drossap/abc) tomhnatt@ % (abc) tomhnatt@ 158.% (abc)
Eksempler på brukere Fra MySQL manualen:
Opprette/fjerne brukere CREATE USER <bruker>@<host> [IDENTIFIED BY <passord> ] DROP USER <bruker>@<host>
Endre passord SET PASSWORD [FOR <user>@<host>] = PASSWORD( <nytt passord> ) Passord er som oftest lagret som en Hash! Husk FLUSH PRIVILEGES
Rettigheter Vi kan styre rettigheter på Bruker Mye ekstra ( antall spørringer i timen etc) DB (/ Host) Tabell Kolonne
Rettigheter GRANT <rettighet>[(<kolonner>)] ON {<tabell> <db>.<tabell> <db>.* *.*} TO <user>@<host> [IDENTIFIED BY <passord>] Rettigheter: ALL,SELECT, INSERT, UPDATE, DELETE, DROP osv http://dev.mysql.com/doc/refman/5.0/en/grant.html I MySQL kan man opprette brukeren direkte med GRANT Uten rettigheter med GRANT USAGE Husk FLUSH PRIVILEGES
Rettighetssjekk Sjekkes i rekkefølgen user, db/host, tables, columns Kan uttrykkes som : global privileges OR (database privileges AND host privileges) OR table privileges OR column privileges NB! Det er alltid høyeste nivå som teller Eks: Vi har tilgang til INSERT i databasen, og da vil vi også automatisk få INSERT på alle nye (i tillegg til eksisterende) tabeller/kolonner i databasen!!!
Rettigheter SHOW GRANTS [FOR <user>@<host>] REVOKE <rettighet>[(<kolonner>)] ON {<tabell> <db>.<tabell> <db>.* *.*} FROM <user>@<host>
Ressursrettigheter Rettigheter sier ikke bare noe om hva man får gjøre, men også ressursbruk. GRANT ALL ON customer.* TO thn'@'localhost' IDENTIFIED BY passord' WITH MAX_QUERIES_PER_HOUR 20 MAX_UPDATES_PER_HOUR 10 MAX_CONNECTIONS_PER_HOUR 5; Fjern en limit ved å sette den til 0 ( ubegrenset)
GRANTE videre Legg til WITH GRANT OPTION GRANT USAGE ON test.test TO testbruker @ % WITH GRANT OPTION; REVOKE vil som oftest fungere cascading når det gjelder GRANT OPTION
Tilkobling Legg til REQUIRE og en eller flere (skilt med AND) av følgende på GRANT SSL X509 CHIPER <string> ISSUER <string> SUBJECT <string> GRANT SELECT ON test.test TO testbruker @ % REQUIRE SSL;
Mer avanserte rettigheter (Constraints) Views (Triggere) Prosedyrer Mellomvare
Rettigheter og Views Ofte vanskelig å sette avanserte rettigheter Spesielt basert på rader osv.. Løsning: view Lønning for alle andre enn deg selv Kun første del av personnummer Alder rundet av til nærmeste 10 er Funker som på tabeller En fare : Brukere kan ha lagd seg egne view før tilgang til tabell blir sperret Dette varier fra DBMS til DBMS
Rettigheter i SQLServer Mer avansert brukersystem Kan koble brukere mot Systembrukere Kan jobbe med roller CREATE ROLL Brukere får en rolle
Fordeler og ulemper med Roller Fordeler Lett å administrere store grupper Ett sted å sjekke for feil Ferdige roller definert Ulemper Lett at mange brukere får for mye rettigheter latskap bruker eksisterende rolle Ofte kompliserende Roller kan arve fra andre roller osv. Standard roller kan la seg utnytte
Tips til brukere og rettigheter Kun rotbruker har tilgang til systemtabeller og kun via localhost Minst mulig rettigheter Gi _aldri_ rettigheter til alle hoster Vær ekstremt nøye med passordregimer (spes. på rotbrukere) Ikke plain-text passord Alle kontoer må ha passord! Rydd ofte i gamle kontoer Første skanse er innlogging, dernest rettigheter! Gi brukere rettigheter på tabellnivå ikke db eller bruker Ingen må vite andres passord.. Ei heller DBA La brukeradminsitrasjon kun foregå på localhost Lag en bruker for hver jobb! Alternativt navn på admin? Begrense antall admins?
Hvilke brukere/rettigheter trenger man? Forslag til fremgangsmåte: 1. Hierarki av admins Hvor mange skal man ha? 2. Identifiser ulike typer oppgaver i db 3. Grupper disse sammen i logiske brukere (f.eks ansatt, student, webgrensensitt) 3.b Sett rettigheter på logiske brukere (standardrettigheter) 4. Hvilke fysiske brukere trenger man 4.b Finn avvik fra standardrettighetene
Oversikt over brukere/privilegier Kan være kjekt å lage en matrise (for hver DB): Lønnstabell Stemplingsur thn@localhost SELECT, VIEW, UPDATE ALL sjefen@localho st ALL DROP
Oversikt over brukere/privilegier Vi kan også lage en avviksmatrise fra standardrettighetene Standard thn@localhost olsen@localhost Lønnstabell SELECT, INSERT +UPDATE - INSERT -SELECT -INSERT Stemplingsur ALL - DROP - DELETE
Dagens nøtt: Er det mulig å bruke SQL til å lage en sorteringsrekkefølge? Eksempel: tab plass innhold Thorsen Andersen Olsen SQL tab plass innhold 3 Thorsen 1 Andersen 2 Olsen Ja, det er mulig (lag i tilfelle SQL-setningen(e)) Nei, det er umulig, fordi.. Tillegg: spiller det noen rolle om man krever at like skal ha lik plassering (f.eks. at alle Olsen skal ha lik plassering), eller om alle skal ha et unikt nr?