.NET 2 MS SQL Server (2017)radar.zhaw.ch/~rege/dnet_fs19/DNET2_0405.pdf · 2019. 3. 14. · 1989:...

106
.NET 2 MS SQL Server (2017)

Transcript of .NET 2 MS SQL Server (2017)radar.zhaw.ch/~rege/dnet_fs19/DNET2_0405.pdf · 2019. 3. 14. · 1989:...

  • .NET 2

    MS SQL Server (2017)

  • Themen:

    1. History

    2. SQL Server Architektur

    3. T-SQL: Standards, Datentypen

    4. T-SQL: Programming

    5. Monitoring

    6. Services

    7. Informationssicherheit

    .NET 2 MS SQL Server (2017)

    https://docs.microsoft.com/en-us/sql/sql-server/sql-server-technical-documentation?view=sql-server-2017

  • .NET 2 MS SQL Server (2017)

    https://docs.microsoft.com/en-us/sql/sql-server/sql-server-technical-documentation?view=sql-server-2017

  • 1988: Microsoft schliesst sich Ashton-Tate (heute Micro Focus) und Sybase

    (heute SAP) an um Sybase-Variante für OS/2 zu entwickeln (in C)

    1989: MS SQL Server 1.0 for OS/2 (16-bit)

    1993 Trennen sich Sybase und Microsoft

    1995: Erste Version MS SQL Server Version (6.0) ohne «Sybase-Code»

    1996: SQL Server von Sybase wird zu Adaptive Server Enterprise

    umbenannt.

    1998: SQL Server 7.0 war eine umfangreiche Neuschreibung (C++)

    2005: SQL Server 2005 unterstützt XML (XQuery), Common Language

    Runtime (CLR) Integration

    2010: Sybase wird durch SAP America gekauft

    2010: Azure SQL Database (noch stark reduzierte Version)

    2016: SQL Server 2016 unterstützt nur noch x64 Prozessoren

    2017: SQL Server unterstützt auch Linux

    1. MS SQL Server History

  • Versionen:

    1. MS SQL Server History

  • 1. MS SQL Server History

    Editionen:

  • 1. MS SQL Server History

  • PAL = Plattform Abstraction Layer

    2. MS SQL Server Architektur

    Grobe SW-Architektur des SQL-Servers

    Operating Systems:

    • Windows / Windows Server

    • Red Hat Enterprise Linux

    • SUSE Linux Enterprise Server

    • Ubuntu

    • Docker

    • SQL-VM in Azure

  • Client/Server-Architektur:

    2. MS SQL Server Architektur

    Request: SQL-Query

    Replies: nur Daten

  • The SQL Server Network

    Interface (SNI) is a protocol

    layer that establishes the

    network connection between

    the client and the server.

    2. MS SQL Server Architektur

    DAB2-5-Schichten-Modell

    Grau, teurer Freund, ist alle

    Theorie und grün des Lebens

    goldner Baum.

    Johann Wolfgang von Goethe

  • Protokolle Transport- und Internet-Schicht

    SQL Server verwendet verschiedene Protokolle für die Verbindung

    mit der SQL Engine und den Diensten:

    1. Shared Memory

    2. TCP (Transportschicht) / IP (Internetschicht)

    Portnummern werden dynamisch oder fix vergeben (Default: 1433)

    3. Named Pipes (TCP, Default-Port: 445)

    2. MS SQL Server Architektur

  • 2. MS SQL Server Architektur

    Default:

  • Protokoll Applikations-Layer

    SQL Server verwendet auf Ebene

    Applikations-Layer das

    • TDS: Tabular Data Stream Protokoll

    2. MS SQL Server Architektur

    TDS beinhaltet:

    • Authentifizierung und Verhandlung der

    Verschlüsselung

    • Spezifikation von Anforderungen in SQL

    • Aufruf einer Stored Procedure oder

    benutzerdefinierten Funktion (RPC)

    • Die Rückgabe von Daten

    • Transaktions-Manager-Anfragen

  • SQL Server Browser (Windows Service)

    Welche SQL Server sind an welchen Ports

    verfügbar?

    2. MS SQL Server Architektur

    Funktionsweise:

    1. Clients fordert Server-Ressourcen an und sendet UDP-Nachricht

    (Transportschicht) über Port 1434

    2. SQL Server Browser antwortet mit dem TCP/IP-Port oder der Named Pipe

    der gewünschten Instanz

    3. Netzwerkbibliothek des Clients verbindet sich

    Auch mit fixer IP-Adresse und Port möglich, dann muss diese aber im

    Programmcode festgelegt werden.

  • 2. MS SQL Server Architektur

    Hauptkomponenten des Microsoft SQL Server:

    1. Database Engine: Failover-Clustering, Tuning Advisor, Mirorring, Always On,

    Full-Text Search

    2. Analysis-Services (SSAS): Data Mining, Online Analytical Processing

    (OLAP-Cubes)

    3. (BI) Reporting Services (SSRS) (Berichtgenerierungssystem): Erstellen und

    Rendern von Reports (E-Mail, Files, Interactive Web-based Formats), Tools

    zum Erstellen von Berichten:

    1. mit SQL Server Data Tools (SSDT), Teil von Microsoft's Visual Studio

    2. mit dem Report Builder (als Standalone-Produkt)

    4. Integration Services (SSIS): ETL-Serverprodukt

    5. Machine Learning Services: Verteilte,

    skalierbare R Anwendungen (statistische

    Berechnungen und Grafiken) und Python

  • 2. MS SQL Server Architektur

    Tools und Features:

    1. SQL Server Management Studio (SSMS): zur Konfiguration, Verwaltung

    und Administration aller Komponenten innerhalb von Microsoft SQL Server

    2. SQL Server Agent: Zeitplandienst/Scheduler, mit dem Wartungsaufgaben

    und wiederkehrende Aufgaben ausgeführt werden

    3. Configuration Manager: Verwaltung der Services und Netzwerkprotokolle

    4. Master Data Services: Konsolidierung von Daten

    5. Replication: Kopieren und Verteilen von Daten und Datenbankobjekten von

    einer Datenbank in eine andere

    (siehe auch Folie '7. Informationssicherheit: Verfügbarkeit').

    6. Full-Text-Search: Die Volltextsuche ermöglicht es Volltextabfragen gegen

    zeichenbasierte Daten in SQL Server-Tabellen auszuführen.

    7. Microsoft SQL Server Data Tools (for Visual Studio): zur Entwicklung von

    Data Analysis und BI Lösungen

  • 2. MS SQL Server Architektur

    Tools und Features:

    8. Data Quality Services: Wissensdatenbank, um Datenkorrekturen und

    Deduplizierungen für Daten durchzuführen

    9. Service Broker: Message Queue System (can guaranteed delivery order

    with single processing of messages)

    10. Power BI Report Server: Business Analytics-Lösung für Verbindungen mit

    Vielzahl von Datenquellen (Cloud-Lösung/Fully managed service).

    Ist eine Obermenge der Reporting Services (alles, was Sie in SSRS tun

    können, können Sie mit Power BI Report Server tun), zusammen mit der

    Unterstützung von Power BI-Berichten (Power BI Service).

    11. sqlcmd Utility (eines von vielen Befehlszeilen-Programmen)

    12. Business Intelligence Development Studio (Deprecated -> SQL Server Data

    Tools)

    Monitoring Tools siehe 5. Monitoring.

  • 2. MS SQL Server Architektur

    Neu im SQL Server 2019 / Preview (Auswahl):

    • Big data clusters:

    • SQL and Spark Linux containers on Kubernetes

    • Hadoop Anbindung

    • Database Engine:

    • Java language programmability extension

    • Expanded support for persistent memory devices

    • SQL Server Machine Learning Services failover clusters

    • SQL Server on Linux:

    • Replication support

    • Always On Availability

    • Tools:

    • Azure Data Studio

    • Always On Availability

  • 2. MS SQL Server Architektur

    TPM-Performance

    TPM = Transactions per Minute, extrem schwierig zu

    vergleichen:

    • Abhängig von Hardware und Software

    • Abhängig von Daten/Datenstruktur

    • Abhängig von Queries

    • Abhängig von …

    Theoretisch: Hunderttausende TPM

    http://www.tpc.org

  • 3. T-SQL: Standards

    Standard-SQL (Structured Query Language)

    Ziel der Standardisierung ist es, Anwendungsprogramme so erstellen zu können,

    dass sie vom verwendeten Datenbanksystem unabhängig sind.

    1986 SQL1 wird ANSI-Standard

    1987 SQL1 wird ISO-Standard

    1992 Der Standard SQL2 oder SQL-92 wird von der ISO verabschiedet

    1999 SQL3 oder SQL:1999 wird verabschiedet

    2003 SQL:2003: SQL/XML

    2008 SQL:2008 bzw. ISO/IEC 9075:2008: INSTEAD OF-Trigger, TRUNCATE-Statement

    und FETCH Klausel.

    2011 SQL:2011 bzw. ISO/IEC 9075:2011: "Zeitbezogene Daten" (PERIOD FOR)

    2016 SQL:2016 bzw. ISO/IEC 9075:2016: JSON und "row pattern matching«

    Aussprache SQL:

    • Offiziell: [ɛskjuːˈɛl], gemäss Standard eigenständiger Name (kein Kürzel)

    • Oft auch: [ˈsiːkwəl] nach dem Vorgänger SEQUEL (Structured English Query Language)

  • 3. T-SQL: Standards

    Standard-SQL (Structured Query Language)

    Hersteller verwenden spezifische Erweiterungen um SQL einfacher (prozedural)

    einzusetzen und spezielle Eigenschaften ihrer Systeme zu nutzen:

    • SQL/PSM SQL-Standard Erweiterung: SQL/Persistent Stored Modules

    • T-SQL1) SQL Server (Microsoft) in C++

    • PL/SQL Oracle Database (Oracle) in C und C++

    • MySQL MySQL Server (Oracle) in C und C++

    • PL/pgSQL PostgreSQL (PostgreSQL Global Development Group) in C

    • SQL PL IBM Db2 (IBM) in C und C++

    Hinweis: Mit CTE (Common Table Expressions) und Windowing (OVER-Clause)

    ist SQL (theoretisch) auch ohne spezifische Erweiterungen Turing-Complete.

    1) Der SQL Server unterstützt Server-seitig auch .NET Sprachen, R, Python und Java

  • 3. T-SQL: Standards

    Standard-SQL (Structured Query Language)

    https://db-engines.com/de/ranking_trend

  • 3. T-SQL: Standards

    Datenbankzugriffe in Programmiersprachen:

    1. Native Programmiersprachen mit DB-Anbindung

    Sprachen in denen die Verarbeitung der Daten in der Programmiersprache integriert ist:

    • dBase II (Asthon-Tabe), heute dBASE Plus 11

    • NLP, Natural (Software AG)

    • Visual FoxPro (Microsoft)

    2. Embedded SQL / ESQL

    SQL-Anweisungen im Quelltext von Programmen (z.B. COBOL), Precompiler übersetzt

    in Funktionsaufrufe.

    • EXEC SQL END-EXEC

    3. API-Aufrufe: ODBC, ADO.NET

    • Sammlung von Klassen, die den Zugriff auf relationale Datenbanken

    gewährleisten

    4. Persistenz-Frameworks / Object-Relational Mapper (ORM):

    • Entity-Framework (C#)

    • Hibernate (Java)

    • Und viele andere…

  • 3. T-SQL: Standards

    Statisches und dynamisches SQL:

    1. Statisches SQL

    • SQL-Anweisung zum Zeitpunkt der Programmübersetzung bekannt und

    festgelegt (Stored Procedure).

    • Der Execution Plan kann wiederverwendet werden, muss aber periodisch

    erneuert werden.

    2. Dynamisches SQL

    • SQL-Anweisung erst zum Zeitpunkt der Programmausführung bekannt.

    • Die SQL-Anweisung wird zur Laufzeit interpretieren und optimieren. Da dieser

    Parse-Vorgang Zeit beansprucht, puffert der SQL-Server bereits geparsten SQL-

    Anweisungen (Execution Plan Caching / Plan Cache, Teile des).

    • Die Algorithmen zum Finden von bestehenden Ausführungsplänen erfordern,

    dass Objektreferenzen analog qualifiziert sind.

  • 3. T-SQL: Standards

    Transact-SQL (T-SQL, transactional SQL) ist eine proprietäre Erweiterung

    des SQL-Standards von Sybase und Microsoft.

    T-SQL «erweitert» den SQL-Standard:

    • Prozedurale Programmierung, lokale Variablen

    • Fehlerbehandlung

    • Funktionen zur Zeichenketten- (STRING) Verarbeitung, Datumsverarbeitung und

    mathematische Operationen, etc.

    • Zusätzlich wurden Änderungen an der Funktionalität von DELETE- und UPDATE-

    Statements im Vergleich zu SQL durchgeführt.

    • Xquery Language

    Alle Anwendungen, die mit SQL Server kommunizieren, tun dies, indem sie Transact-SQL-

    Anweisungen an den Server senden, unabhängig von der Benutzeroberfläche der

    Anwendung.

  • 3. T-SQL: Datentypen

    • Der SQL Server bietet ein grosse Anzahl von

    Systemdatentypen

    • Benutzerdefinierte Typen:

    • Datentyp: Null-Werte verboten, Defaultwerte,

    Basistyp,…

    • Tabellentyp: mehrwertige "Attribute"

    • Typ (UDT): CLR-Klasse einer Assembly wird

    angegeben und genutzt.

    • XML-Schema für die Definition von XML-Variablen

    • Da T-SQL z.B. in C# eingebettet wird, ist die Frage der

    Kompatibilität der Datentypen zentral. Der ISO-Standard

    wird nachfolgend ausser Betracht gelassen.

    • In T-SQL kann ausser den Primärschlüsseln jedes

    Attribut Null-Werte enthalten. Daher sollten immer die

    Nullable-Datentypen von C# verwendet werden.

  • 3. T-SQL: Datentypen

    Boolsche Datentypen:

    • bool? ist ein nullable Datentyp.

    T-SQL .NET T-SQL Range

    bit bool? Identisch (mehrere Bit-Datentypen werden in den physischen Tabellen in Bytes

    zusammengeführt)

  • 3. T-SQL: Datentypen

    Ganzzahlige Datentypen (mit und ohne Vorzeichen):

    Potentielle Probleme!

    • ushort, uint und ulong können nicht 1:1 im SQL-Server gespeichert werden

    T-SQL .NET Wertebereich, Kommentar

    - sbyte 8 bits, range from -128 – 127

    smallint short? 16 bits, range from -32,768 - 32,767

    int int? 32 bits, range from -2,147,483,648 - 2,147,483,647

    bigint long? 64 bits, range from –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

    tinyint byte? 8 bits, range from 0 – 255

    - ushort 16 bits, range from 0 - 65,535

    - uint 32 bits, range from 0 - 4,294,967,295

    - ulong 64 bits, range from 0 - 18,446,744,073,709,551,615

  • 3. T-SQL: Datentypen

    Gleitkommazahlen:

    Potentielle Probleme!

    • Zahlen innerhalb des Wertebereich werden korrekt dargestellt, ausserhalb

    treten Rundungsfehler auf, und dann Fehler

    • Theoretisch müsste bei jeder Konvertierung (C# SQL-Server) überprüft

    werden, ob diese gültig ist und ob der Informationsverlust zulässig ist.

    • float([n]), z.B. float(24): n darf im Bereich 1-53 liegen. Der SQL Server

    behandelt n als einen von zwei möglichen Werten. Wenn 1

  • 3. T-SQL: Datentypen

    Overflow, Underflow und Loss of Accuracy überwachen

    • ANSI_WARNINGS:• Warnung bei Null-Werten in Aggregats-Funktionen

    • Fehler (Rollback) bei Division durch 0 und Overflow, sonst Null-Wert

    • ARITHABORT:• Fehler (Rollback) bei Division durch 0 und Overflow, sonst Null-Wert

    • Ist ANSI_WARNINGS ON wird trotzdem Rollback ausgelöst

    • ARITHIGNORE:• Warnung (ohne Rollback) bei Division durch 0 und Overflow

    • Ist ANSI_WARNINGS oder ARITHABORT ON wird trotzdem Rollback ausgelöst

    SET ANSI_WARNINGS { ON | OFF }

    SET ANSI_WARNINGS { ON | OFF }SET ARITHABORT { ON | OFF }SET ARITHIGNORE { ON | OFF }

    SET ANSI_WARNINGS ON-- Check if ANSI_Warnings is ON (ON = 1)SELECT SESSIONPROPERTY('ANSI_WARNINGS')

  • 3. T-SQL: Datentypen

    Overflow, Underflow und Loss of Accuracy überwachen

    • NUMERIC_ROUNDABORT:• Fehler, falls bei einer Berechnung ein Genauigkeitsverlust (Underflow oder Loss of Accuracy) eintritt

    SET ANSI_WARNINGS { ON | OFF }

    SET NUMERIC_ROUNDABORT { ON | OFF }

    SET NUMERIC_ROUNDABORT ON;GODECLARE @result DECIMAL(5, 2),

    @value_1 DECIMAL(5, 4),@value_2 DECIMAL(5, 4);

    SET @value_1 = 1.1234;SET @value_2 = 1.1234 ;SELECT @result = @value_1 + @value_2;SELECT @result;GO

    Meldung 8115, Ebene 16, Status 7, Zeile 8

    Arithmetic overflow error converting numeric to data type numeric.

  • 3. T-SQL: Datentypen

    Festkommazahlen:

    Potentielle Probleme!

    • decimal(p[,s]) and numeric(p[,s])

    • Beste Übereinstimmungen in Orange

    • Es gibt keinen Unterschied zwischen den Datentypen decimal und numeric.

    • Rundungsproblematik vom 2er-System fällt weg:

    0.2 (Dezimal) = 0,001100110011001100110011001100110011001100110011...

    Dezimal 0.2 + 0.2 >= Binär 0.2 + 0.2

    • Für Währungen Dezimal verwenden, sonst kann es zu Rundungsfehlern

    kommen

    T-SQL .NET Wertebereich, Kommentar

    decimal(n) - p bytes

    1 - 9 5 bytes

    10 - 19 9 bytes

    20 - 28 13 bytes

    29 - 38 17 bytes

    - decimal 128 bits, range is at least –7.9E−28 - 7.9E28, with at least 28-digit precision

    decimal(28,14) decimal ACHTUNG: die Anzahl Kommastellen ist fix 14!

  • 3. T-SQL: Datentypen

    Zeichen:

    Potentielle Probleme!

    • SQL-Collation bestimmt Sortierung, Case-Sensitivität und Akzent-Sensitivität.

    • ASCII-Encoding: Einige (z.B. japanisches Kanji) enthalten mehr Zeichen, als in

    einem Single-Byte-Codierungsschema dargestellt werden können, und

    erfordern daher eine MBCS-Codierung (Multi-Byte-Character-Set).

    T-SQL .NET Wertebereich, Kommentar

    char(n) - ASCII, n Zeichen lang (max. 8000, abhängig von Encoding)

    varchar(n) - ASCII, n Zeichen lang (max. 8000, abhängig von Encoding)

    nchar(n) - UTF-16 (bei nicht SC-Collation nur Submenge, SC = supplementary characters), n

    Zeichen lang (max. 4000)

    nvarchar(n) - UTF-16 (bei nicht SC-Collation nur Submenge, SC = supplementary characters), n

    Zeichen lang (max. 4000)

    char, nchar,

    varchar (max)

    - max 2^31-1 bytes (2 GB), abhängig von Encoding.

    nvarchar (max) string max 2^31-1 bytes (2 GB), abhängig von Encoding.

    char(1) char 16 bit, UTF-16

  • 3. T-SQL: Datentypen

    Datum/Zeit:

    Potentielle Probleme!

    • Beste Übereinstimmungen in Orange

    • Es kann «nur» ein Offset aber keine Zeitzone gespeichert werden

    T-SQL .NET Wertebereich, Kommentar

    date - 0001-01-01 bis 9999-12-31

    datetime - 1753-01-01 bis 9999-12-31, 00:00:00 bis 23:59:59.997

    datetime2 DateTime? • SQL: 0001-01-01 bis 9999-12-31, 00:00:00 bis 23:59:59.997

    • .NET: 0001-01-01 bis 9999-12-31, Auflösung: 100-Nanosekunde, enthält

    DateTimeKind (UTC, local, not specified)

    datetimeoffset DateTimeOffset? • SQL:0001-01-01 bis 9999-12-31, 00:00:00 bis 23:59:59.997 und +-14 Offset

    (hh:mm)

    • .NET: DateTime plus Offset (TimeSpan)

    smalldatetime - 1900-01-01 bis 2079-06-06, 00:00:00 bis 23:59:59.997

    time - 00:00:00.0000000 through 23:59:59.9999999

  • 3. T-SQL: Datentypen

    Währungen:

    Potentielle Probleme!

    • T-SQL: erlaubt es Geldwerte mit vorangestelltem Währungssymbol

    anzugeben, aber SQL Server speichert keine Währungsinformationen, so dass

    der Zweck unklar ist

    • Vorsicht: Basistyp ist «Integer» mit 4 Kommastellen

    • Besser SQL-Typ Decimal verwenden

    T-SQL .NET Wertebereich, Kommentar

    money - 8 bits, -922,337,203,685,477.5808 to 922,337,203,685,477.5807

    smallmoney - 4 bits, -214,748.3648 to 214,748.3647

  • 4. T-SQL: Programmierung

    • Motivation und Varianten der Programmierung

    • Kommentare

    • Meldungen/Ausgaben

    • Variablen, globale Variablen

    • Kontrollstrukturen

    • Block

    • Schleife

    • Bedingung

    • Sprung

    • Prozeduraufruf

    • Fehlerbehandlung)

    • Dynamische Codeausführung

    • Cursor-Programmierung

    • Transaktionen

    • Stored Procedure

    • Benutzerdefinierte Funktionen

    • Trigger

  • 4. T-SQL: Programmierung

    Motivation zur Programmierung im SQL Server

    • Komplexe Operationen lassen sich nicht (leicht) in einem einzelnen SQL-Kommando

    ausdrücken, so dass sie in mehrere Kommandos zerlegt und deren Ablauf durch ein

    «Anwendungsprogramm» gesteuert werden muss

    • Gespeicherte Prozeduren erlauben, neben den Daten, auch Funktionalität der

    modellierten Anwendung (business logic) redundanzfrei und zentral im RDBMS

    abzubilden

    • Ausführung direkt im RDBMS und damit häufig auf leistungsstarker Server-Hardware

    • Reduzierung der Netzwerklast, da Daten nicht zum Client transferiert werden müssen

    • Automatische Optimierung durch den Anfrageoptimierer des RDBMS möglich

  • 4. T-SQL: Programmierung

    Varianten der Programmierung im SQL Server

    • Stored Procedures (SP)Ganze Abläufe von Anweisungen werden im Data-Dictionary der jeweiligen Datenbank gespeichert.

    • User-Defined Functions (UDF)Eine Funktion, die der Anwender selbst erstellen und in seine Projekte einbinden kann. Im Gegensatz

    zu einer Stored Procedure kann eine UDF nicht als Programm gestartet werden

    • (Datenbank-)TriggerIst eine Funktion, die bei einer bestimmten Änderung von Daten oder Metadaten aufgerufen wird.

  • 4. T-SQL: Programmierung

    Wichtigste Syntax-Konventionen (nicht EBNF)

    • { } Erforderliche Syntax-Elemente

    • [ ] Optionale Syntax-Elemente

    • | Trennt Syntax-Elemente, die in Klammern oder Klammern eingeschlossen sind.

    Es kann nur einer der Punkte verwenden werden.

    • […n] Zeigt an, dass die vorhergehende Position n-mal wiederholt werden kann

    • ; Transact-SQL-Anweisungsterminator.

    Obwohl das Semikolon für die meisten Anweisungen in dieser Version von

    SQL Server nicht erforderlich ist, wird es in einer zukünftigen Version benötigt

    • < > Nichtterminal Symbol

    Beispiel:{ EXEC | EXECUTE }{

    [ @return_status = ] { module_name [ ;number ] | @module_name_var }

    [ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] }

    ][ ,...n ] [ WITH [ ,...n ] ]

    }

  • 4. T-SQL: Programmierung

    GO-Befehl:

    Gibt eine Meldung an den Client zurück (z.B. an SSMS in Console):

    1. GO ist ein Utility-Befehl, keine T-SQL-Anweisung – nicht mit ";" verwechseln.

    2. GO signalisiert das Ende eines Batches (Stapels) von T-SQL-Anweisungen.

    3. SQL Server-Dienstprogramme interpretieren GO als Signal, dass sie den

    Batch an den SQL Server senden sollen.

    4. Batches unterliegen bestimmten Regeln, z.B.:

    1. Lokale Variablen sind nur innerhalt des Batches sichtbar

    2. Darf nicht innerhalb der Def. einer Stored Procedure verwendet werden

    3. CREATE PROCEDURE muss an Anfang eines Batches stehen

    4. …

    PRINT 'Hello'GO 5

    PRINT [ count ]

  • 4. T-SQL: Programmierung

    Kommentare

    Transact-SQL kennt zwei Arten von Kommentaren:

    1. Zeilenkommentar (-- …)

    2. Blockkommentar (/* … */)

    select ...from file -- Main filewhere ... -- Filter conditionorder by -- Sort by...

    /* Select all the columnsof all the recordsin the Customers table: */SELECT * FROM Customers;

  • 4. T-SQL: Programmierung

    Meldungen/Ausgaben:

    Gibt eine Meldung an den Client zurück (z.B. an SSMS in Console):

    1. Meldung mittels PRINT

    PRINT N'kleine Testmeldung' -- das N markiert Zeichen in Unicode, -- ohne N wird Windows-1252 verwendet

    PRINT msg_str | @local_variable | string_expr

  • 4. T-SQL: Programmierung

    Meldungen/Ausgaben:

    2. Meldung mittels RAISERROR

    RAISERROR 'Not found', 20

    RAISERROR ( { msg_id | msg_str | @local_variable } { ,severity ,state } -- severity (0..25) [ ,argument [ ,...n ] ] ) -- werden in String eingefügt[ WITH option [ ,...n ] ] -- mit LOG-Eintrag?

    Die severity von 20 bis 25 werden als schwerwiegend angesehen. In diesem Fall wird die

    Clientverbindung nach Empfang der Meldung sofort beendet und der Fehler im Fehlerprotokoll

    protokolliert.

    3. Meldung mittels THROW

    THROW 51000, 'Record not found', 1

    THROW [ { error_number | @local_variable }, -- Fehlernummer > 50000{ message | @local_variable }, -- Fehlerbeschreibung{ state | @local_variable } ] -- zusätzlicher "Status" (0..255)

    Sollte in Kombination mit Try-Catch-Block verwendet werden, ansonsten wird Ausführung sofort

    abgebrochen.

  • 4. T-SQL: Programmierung

    Variablen:

    Variablen werden im Body einer Prozedur mit der DECLARE-Anweisung

    deklariert und mit einer SET- oder SELECT-Anweisung mit Werten belegt.

    DECLARE@school nvarchar(50) = 'ZHAW',@department nvarchar(50) = 'School of Engineering',@foundingYear int = 1874,@nrOfStudents int

    SET @nrOfStudents = 50SELECT @nrOfStudents = 50

    DECLARE {

    { @local_variable [AS] data_type [ = value ] } | { @cursor_variable_name CURSOR }

    } [,...n] | { @table_variable_name [AS] }

    Initialwert ist NULL

  • 4. T-SQL: Programmierung

    Lokale Variablen:

    Das Resultat einer SELECT-Anweisung kann einer Variablen zugewiesen

    werden, wenn die Tabelle einen einzigen Wert enthält

    DECLARE @nrOfStudents intSET @nrOfStudents = (SELECT COUNT(*) FROM Studenten)

    Initialwert ist NULL

  • 4. T-SQL: Programmierung

    Tabellen Variablen:

    Table-Variablen sind Variablen die Tabellen enthalten.

    declare @tabvar table(col1 varchar(10), col2 float, col3 float, col4 float)

    insert @tabvar values('a', 1, 1, 1)insert @tabvar values('b', 2, 2, 2)

    ::= TABLE ( { | } [ ,...n] )

    DECLARE {

    { @local_variable [AS] data_type [ = value ] } | { @cursor_variable_name CURSOR }

    } [,...n] | { @table_variable_name [AS] }

  • 4. T-SQL: Programmierung

    Globale Variablen (eine Art System-Funktionen):

    Etwas über 20 Werte die innerhalb von T-SQL verwendet werden können. Die

    wichtigsten sind:

    • @@ERROR: Fehlermeldung des letzten Statements, 0 bei fehlerfrei.

    • @@ROWCOUNT: Die Anzahl der Zeilen, die vom letzten Befehl betroffen sind.

    • @@SERVERNAME: Name des Servers

    • @@TRANCOUNT: Nesting-Level der Transaction

    • @@VERSION: SQL-Server-Version

    SELECT @@VERSION AS 'SQL Server Version'

    Microsoft SQL Server 2012 (SP4) (KB4018073) - 11.0.7001.0 (X64) Aug 15 2017 10:23:29 Copyright (c) Microsoft Corporation Web Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1)

    • Im weiteren gibt es eine SEHR grosse Zahl von weiteren System-Funktionen

    (z.B. ERROR_PROCEDURE()). Eine Aufzählung ist an dieser Stelle

    unmöglich.

  • 4. T-SQL: Programmierung

    Globale Variablen (eine Art System-Funktionen):

    • Im weiteren gibt es eine SEHR grosse Zahl von weiteren System-Funktionen

    (z.B. ERROR_PROCEDURE()). Eine Aufzählung ist an dieser Stelle

    unmöglich.

  • 4. T-SQL: Programmierung

    (Anweisungs-)Block:

    Enthält eine Reihe von Transact-SQL-Anweisungen, so dass eine Gruppe von

    Transact-SQL-Anweisungen erzeugt wird.

    BEGINUPDATE Personal SET alter = alter + 1DELETE Personal WHERE alter >= 65

    END

    BEGIN { sql_statement | statement_block }

    END

    Wird innerhalb Bedingungen und Schleifen verwendet.

  • 4. T-SQL: Programmierung

    Schleife:

    WHILE-Kommando für wiederholte Ausführung eines Anweisungsblocks.

    DECLARE @i int = 1WHILE @i

  • 4. T-SQL: Programmierung

    Bedingung mittels IF:

    IF-Kommande zur bedingten Ausführung von Anweisungsblöcken.

    IF DATENAME(weekday, GETDATE()) IN (N'Saturday', N'Sunday')SELECT 'Weekend';

    ELSESELECT 'Weekday';

    IF Boolean_expression{ sql_statement | statement_block }

    [ ELSE { sql_statement | statement_block } ]

  • 4. T-SQL: Programmierung

    Bedingung mittels Konditionale (CASE):

    SELECT ProductNumber, Category =CASE ProductLine

    WHEN 'R' THEN 'Road'WHEN 'M' THEN 'Mountain'WHEN 'T' THEN 'Touring'WHEN 'S' THEN 'Other sale items'ELSE 'Not for sale'

    END, Name FROM Production.Product

    CASE WHEN when_expression THEN result_expression [ ...n ] [ ELSE else_result_expression ]

    END

    Konditional wertet zu einem Rückgabewert aus und dient, im Gegensatz zu IF ...

    ELSE, nicht zur Ablaufsteuerung.

  • 4. T-SQL: Programmierung

    Programmsprung (GOTO):

    Ändert den Ablauf der Ausführung und springt zu einem Label.

    DECLARE @Counter INT;SET @Counter = 1;WHILE @Counter < 10 BEGIN

    SELECT @Counter SET @Counter = @Counter + 1 IF @Counter = 4 GOTO Branch_One --Jumps to the first branch. IF @Counter = 5 GOTO Branch_Two --This will never execute.

    ENDBranch_One:

    SELECT 'Jumping To Branch One.'GOTO Branch_Three; --This will prevent Branch_Two from executing.

    Branch_Two: SELECT 'Jumping To Branch Two.'

    Branch_Three: SELECT 'Jumping To Branch Three.';

    Label:

    GOTO Label

  • 4. T-SQL: Programmierung

    Prozeduraufruf (Execute):

    Führt in T-SQL eine Stored Procedure aus

    { EXEC | EXECUTE }{

    [ @return_status = ] { module_name | @module_name_var }

    [ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] }

    ] [ ,...n ] [ WITH [ ,...n ] ] -- z.B. RECOMPILE

    }

    EXEC getSalary @EmployeeID = 6;

    DECLARE @tabvar TABLE(col1 varchar(10), col2 float, col3 float, col4 float)

    INSERT @tabvar EXEC sp -- speichert das Resultat in der Tabellenvariablen

    DECLARE @salary float;

    EXEC getSalary @EmployeeID = 6, @SalaryEmployee = @salary OUTPUT;

  • 4. T-SQL: Programmierung

    Fehlerbehandlung:

    Ein TRY...CATCH-Konstrukt fängt alle Ausführungsfehler ab, die eine Severity von

    mehr als 10 haben und die die Datenbankverbindung nicht schliessen (Severity

    >= 20).

    BEGIN TRY-- Generate divide-by-zero error. SELECT 1/0;

    END TRYBEGIN CATCH

    -- Execute error retrieval routine. EXECUTE usp_GetErrorInfo;

    END CATCH;

    BEGIN TRY { sql_statement | statement_block }

    END TRY BEGIN CATCH

    [ { sql_statement | statement_block } ] END CATCH

  • Execute a character string { EXEC | EXECUTE }

    ( { @string_variable | [ N ]'tsql_string' } [ + ...n ] ) [ AS { LOGIN | USER } = ' name ' ]

    [;]

    EXEC ('USE AdventureWorks2012; SELECT BusinessEntityID, JobTitle\FROM HumanResources.Employee;');

    4. T-SQL: Programmierung

    Dynamische Codeausführung (EXEC):

    Führt eine Befehls- oder Zeichenkette aus.

    ACHTUNG: SQL Injection!

  • sp_executesql [ @stmt = ] statement[

    { , [ @params = ] '@parameter_name data_type [ OUT | OUTPUT ][ ,...n ]' } { , [ @param1 = ] 'value1' [ ,...n ] }

    ]

    EXECUTE sp_executesql'SELECT * FROM Employee WHERE BusinessEntityID = @level','@level tinyint',@level = 109;

    4. T-SQL: Programmierung

    Dynamische Codeausführung (sp_executesql):

    Die Systemprocedur sp_executesql interpretiert einen SQL-String und führt

    diesen aus.

    Der SQL Server enthält viele solcher Systemproceduren…

  • 4. T-SQL: Programmierung

    Cursor Programmierung:

    • In relationalen DBMS werden SQL-Operationen auf Mengen von Datensätzen

    durchgeführt (z.B. SELECT-Anweisung).

    • Muss die Stored Procedure aber mit einem Datensatz arbeiten und nicht mit

    der Menge, dann kann dies mit Hilfe von Cursorn erfolgen.

    • Analogie in der Programmierung: Schleife wie FOR oder WHILE.

    Ablauf:

    1. Cursor deklarieren (Declare)

    2. Cursor öffnen (Open)

    3. Datensätze lesen (Fetch)

    4. Cursor schliessen (Close)

    5. Cursor freigeben (Deallocate)

    Performance: Der SQL-Server hat optimierte Algorithmen zur Bearbeitung von

    Mengen. Cursor sollten daher nur verwendet werden, wenn:

    • Kleine(re) Datenmengen

    • Einzelner Datensatz muss "speziell" bearbeitet werden

  • DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ] [ FORWARD_ONLY | SCROLL ] [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ] [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ] [ TYPE_WARNING ] FOR select_statement[ FOR UPDATE [ OF column_name [ ,...n ] ] ]

    4. T-SQL: Programmierung

    Cursor deklarieren:

    DECLARE emp_cursor CURSOR FOR

    SELECT emp_id, emp_name FROM Employee ORDER BY emp_id;

    • LOCAL: nur innerhalb des Batches

    • STATIC: mit Snapshot

    • KEYSET: Inhalt und Reihenfolge wird fixiert

    • FAST_FORWARD = READ_ONLY + FORWARD_ONLY (bessere Performance)

    • SCROLL_LOCKS: Datensätze für nachfolgende Updates gelocked

    • OPTIMISTIC: keine Locks, Update allenfalls nicht möglich

  • 4. T-SQL: Programmierung

    Cursor öffnen:

    OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }

    OPEN emp_cursor

    @@CURSOR_ROWS gibt die Anzahl der qualifizierten Zeilen an.

  • 4. T-SQL: Programmierung

    Datensätze lesen:

    FETCH[ [ NEXT | PRIOR | FIRST | LAST

    | ABSOLUTE { n | @nvar } | RELATIVE { n | @nvar } ] FROM

    ] { { [ GLOBAL ] cursor_name } | @cursor_variable_name } [ INTO @variable_name [ ,...n ] ]

    FETCH NEXT FROM emp_cursor INTO @emp_id, @emp_namePRINT 'Employee_ID Employee_Name'WHILE @@FETCH_STATUS = 0 BEGIN

    PRINT @emp_id + ' ' + @emp_nameFETCH NEXT FROM emp_cursor INTO @emp_id,@emp_name

    END

  • 4. T-SQL: Programmierung

    Cursor schliessen und freigeben:

    CLOSE { { [ GLOBAL ] cursor_name } | cursor_variable_name }

    CLOSE emp_cursor;

    DEALLOCATE { { [ GLOBAL ] cursor_name } | @cursor_variable_name }

    DEALLOCATE emp_cursor;

  • 4. T-SQL: Programmierung

    Cursor Programmierung, vollständiges Beispiel:

    DECLARE @emp_id int, @emp_name varchar(20);DECLARE emp_cursor CURSOR FOR

    SELECT emp_id,emp_name FROM Employee order by emp_id;

    OPEN emp_cursorFETCH NEXT FROM emp_cursor INTO @emp_id, @emp_namePRINT 'Employee_ID Employee_Name'WHILE @@FETCH_STATUS = 0 BEGIN

    PRINT @emp_id + ' ' + @emp_nameFETCH NEXT FROM emp_cursor INTO @emp_id,@emp_name

    ENDCLOSE emp_cursor;DEALLOCATE emp_cursor;

  • 4. T-SQL: Programmierung

    Transaktionen:

    BEGIN { TRAN | TRANSACTION }[ { transaction_name | @tran_name_variable }

    [ WITH MARK [ 'description' ] ]

    OPEN emp_cursor

    • Transaction_name erscheint im Log des SQL Server

    • WITH MARK kann verwendet, um bei einem Restore Transaktionen bis oder ab der

    Marke (benannt durch transaction_name) in die DB einzuspielen

    • Nested (verschachtelte) Transaktionen haben keine Wirkung, nur die äusserte

    Transaktion 'gilt'.

    • DELAYED_DURABILTY: Transaktions-Log-Records werden verzögert vom Puffer in das

    Log-File geschrieben -> potentieller Datenverlust, dafür schneller und höhere Parallelität

    COMMIT [ { TRAN | TRANSACTION } [ transaction_name | @tran_name_variable ] ][ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ]

    OPEN emp_cursor

  • 4. T-SQL: Programmierung

    Transaktionen:

    ROLLBACK { TRAN | TRANSACTION } [ transaction_name | @tran_name_variable| savepoint_name | @savepoint_variable ]

    ROLLBACK

    SAVE { TRAN | TRANSACTION } { savepoint_name | @savepoint_variable }

    SAVE TRANSACTION savepoint

    • Mit einem Savepoint kann ein Rollback für einen Teil der Transaktion ausgelöst werden.

    • Rollback in Nested Transactions wirkt auf alle Transaktionen.

  • 4. T-SQL: Programmierung

    T-SQL Stored Procedure Definition:

    CREATE [ OR ALTER ] { PROC | PROCEDURE } [schema_name.] procedure_name[ { @parameter [ type_schema_name. ] data_type } [ OUT | OUTPUT | [READONLY] ] [ ,...n ] [ WITH [ ,...n ] ] [ FOR REPLICATION ] AS { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }

    CREATE PROC GetData@NrOfRecords int

    ASBEGIN

    SELECT TOP(@NrOfRecords) EntityID, Lastname, FirstName FROM Person.Person;SELECT TOP(@NrOfRecords) CustomerID, AccountNumber FROM Sales.Customer;

    END;

    • ALTER und DROP zum Änderung oder Löschen von Stored Procedures

    • Der Execution Plan dieser Query ist vermutlich schlecht, da die Anzahl der zu

    verwendeten Records beim Speichern nicht bekannt ist, besser:

    SELECT TOP(@NrOfRecords) EntityID, Lastname, FirstName FROM Person.Person OPTION (RECOMPILE);

  • 4. T-SQL: Programmierung

    T-SQL Stored Procedure Execute:

    [ { EXEC | EXECUTE } ] { [ @return_status = ] { module_name | @module_name_var }

    [ [ @parameter = ] { value | @variable [ OUTPUT | [DEFAULT] } ] [,...n ] [ WITH [ ,...n ] ]

    }

    EXECUTE GetData @NrOfRecords = 100;

  • 4. T-SQL: Programmierung

    Skalare Funktion Definition:

    CREATE [ OR ALTER ] FUNCTION [ schema_name. ] function_name( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type

    [ = default ] [ READONLY ] } [ ,...n ] ]

    ) RETURNS return_data_type

    [ WITH [ ,...n ] ] [ AS ] BEGIN

    function_bodyRETURN scalar_expression

    END

    CREATE FUNCTION udfNetSale(@quantity INT,@list_price DEC(10,2),@discount DEC(4,2))

    RETURNS DEC(10,2)AS BEGIN

    RETURN @quantity * @list_price * (1 - @discount);END;

  • 4. T-SQL: Programmierung

    Trigger:

    CREATE [ OR ALTER ] TRIGGER [ schema_name . ]trigger_nameON { table | view }[ WITH [ ,...n ] ] { FOR | AFTER | INSTEAD OF }{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }

    AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME }

    CREATE TRIGGER reminder1 ON Sales.CustomerAFTER INSERT, UPDATEAS RAISERROR ('Notify Customer Relations', 16, 10);

    Trigger stellen die deleted und inserted (konzeptionellen) Tabellen zur Verfügung (innerhalb des Triggers). Sie entsprechen strukturell der Tabelle, auf der der Trigger definiert

    ist. Die deleted und inserted Tabellen enthalten die alten und/oder neuen Werte der Zeilen, die geändert wurden.

  • 5. Monitoring

    Monitoring Objekte:

    • Performance und Tuning

    • Schedules (Maintenance)

    • Backup / Restore

    • Fehler

    Microsoft-Monitoring-Tools in Windows:

    1. System Monitor (Leistungsüberwachung, perfmon.exe)

    2. Event Viewer (Ereignisanzeige)

    3. Task Manager

    4. Microsoft Message Analyser

    5. Network Monitor Agent (deprecated -> Microsoft Message Analyser)

  • 5. Monitoring

    Microsoft-Monitoring-Tools für SQL Server (Server und Database):

    1. SQL-Server-Protokolle

    2. Functions (T-SQL: System Statistical, @@CPU_BUSY, etc.)

    3. System Stored Procedures (sp_who, sp_lock, sp_spaceused, sp_monitor,

    etc.)

    4. Views (sys.dm_tran_locks, sys.dm_exec_trigger_stats und viele mehr)

    5. SQL Server Management Studio (SSMS):

    I. Activity Monitor

    II. Execution Plan (Grafisch oder Text)

    III. Live Query Statistics (LQS) = Execution Plan in Real Time (Live)

    IV. Reports vom Server bis zu einzelnen Objekten (ca. 50 Stück)

    V. etc.

    6. DataBase Console Commands (DBCC, in Abfragefenster oder sqlcmd):

    I. Maintenance (indexdefrag, cleantable, …)

    II. Validation (checkdb, checkalloc, …)

    III. Informational (showcontig, show_statistics, …)

    IV. Miscellaneous (clonedatabase, freesystemcache, …)

    7. Database Engine Tuning Advisor (DTA)

  • 5. Monitoring

    Microsoft-Monitoring-Tools für SQL Server (Fortsetzung):

    8. Extended Events (Event Sessions)

    I. XEvent Profiler (SSMS)

    II. system_health session

    III. SQL Server PowerShell Provider

    9. Distributed Replay Utility

    10. Query Tuning Assistent (QTA, ab SSMS v18, für Versionswechsel)

    11. Query Store

    12. Database Experimentation Assistant (DEA)

    13. Session Auswertungen SET STATISTICS {IO | TIME | XML | PROFILE} {ON | OFF}

    14. SQL Trace (deprecated -> Extended Events)

    15. SQL Server Profiler (deprecated -> Extended Events)

  • 5. Monitoring

    1. SQL-Server-Protokolle

  • 5. Monitoring

    5. SSMS, I: Activity Monitor

  • 5. Monitoring

    5. SSMS, II: Execution Plan

  • 5. Monitoring

    5. SSMS, II: Reports

  • 5. Monitoring

    6. DataBase Console Commands (DBCC)

  • 5. Monitoring

    7. Database Engine Tuning Advisor (DTA)

    Untersucht, wie Abfragen verarbeitet werden, und empfiehlt dann, wie die Leistung

    verbessert werden kann, indem Datenbankstrukturen wie Indizes, indexierte Views und

    Partitionierung geändert werden.

    Zwei GUIs: grafische Benutzeroberfläche (GUI) und Dienstprog. DTA-Command-Prompt.

    Die Optimierung wird für eine definierte Menge von Queries (Workload) vorgeschlagen,

    nicht als Gesamtkompromiss!

  • 5. Monitoring

    8. Extended Events (xevents)

    • Leichtgewichtiges Monitoring, das nur sehr wenige Leistungsressourcen verbraucht.

    • Monitoring Events des SQL-Servers (ca. 1'400 Event-Arten) und System-Aktivitäten

    • Definition von Sessions die bestimmte Events protokollieren, z.B.:

    • Aktivität des SQL-Servers monitoren, z.B. Checkpoints

    • Queries finden, die die meisten Sperren verursachen

    • Welche Sessions halten Sperren über längere Zeit, ohne dass diese aktiv sind

  • 5. Monitoring

    8. Extended Events (xevents)

    • Verschiedene Tools um Ergebnisse auszuwerten

    • Wenige Standard-Event-Sitzungen sind vordefiniert

  • 5. Monitoring

    9. Distributed Replay Utility

    Wiederholung und Simulation eines Workloads (erstellt mittels Server Profiler, z.B. mit

    TSQL_Replay-Template) von mehreren Computern.

    • Administration Tool: Eine Konsolenanwendung (DReplay.exe), zur Kommunikation mit dem

    Controller.

    • Controller: Ein Computer mit dem Windows-Dienst Distributed-Replay-Controller. Dieser orchestriert

    die Aktionen der Clients.

    • Clients: Ein oder mehrere Computer (physisch oder virtuell) mit dem Windows-Dienst Distributed-

    Replay-Client.

    • Target Server: Zu testende Instanz des SQL Servers (z.B. wenn HW/SW/Version ändert).

  • 5. Monitoring

    11. Query Store

    Der Query Store speichert eine Historie von Abfragen, Plänen und Laufzeitstatistiken.

  • 5. Monitoring

    12. Database Experimentation Assistant

    Vergleicht die Leistung der Instanzen A und B (Basis ist das Distributed Replay Utility).

  • 6. Services

    Services des SQL Servers:

    • SQL ServerSQL Server Database Engine (Default Instanz: MSSQLSERVER)

    • SQL Server BrowserWelche SQL Server sind an welchen Ports verfügbar?

    • SQL Server AgentDer SQL Server-Agent kann einen Auftrag nach einem Zeitplan oder als Reaktion auf ein

    bestimmtes Ereignis ausführen.

  • 7. Informationssicherheit

    Als Informationssicherheit bezeichnet man Eigenschaften von

    informationsverarbeitenden und -lagernden Systemen, die die Schutzziele

    1. Vertraulichkeit,

    2. Verfügbarkeit und

    3. Integrität sicherstellen.

    Performance und Datenun-

    abhängigkeit auf Ebene DB

    werden wir vernachlässigen

  • 7. Informationssicherheit: Vertraulichkeit

    Massnahmen:1. Authentifizierung und rollenbasierte Zugriffssteuerung

    2. Verschlüsselung der Kommunikation (Client/Server): IPSec oder TLS (-> kommt später)

    3. Verschlüsselung der physischen Daten-, Log- und Backup-Dateien (Transparent Data Encryption)

    4. Verschlüsselung von Stored Procedures, Functions, Trigger, Views (WITH ENCRYPTION:

    obfuscated und unsichtbar)

    5. Verschlüsselung Backup

    6. Always Encrypted (inkl. Backup and Log)

    7. Row-Level Security (RLS)

    8. Static/Dynamic Data Masking

    9. Vulnerability Assessment

    10. Volltextabfrage (Suche personenbezogener Daten)

    11. Serverüberwachung (SQL Server Audit):

    12. E-Mail für Events (z.B. wenn bestimmte Daten geändert werden)

    13. Datenbankschemas: Auftrennen der Daten nach Berechtigung

    14. Passwort Policy (T-SQL CHECK_POLICY)

    15. SQL Injection

  • 7. Informationssicherheit: Vertraulichkeit

    1. Authentifizierung und rollenbasierte Zugriffssteuerung

  • 7. Informationssicherheit: Vertraulichkeit

    1. Authentifizierung und rollenbasierte Zugriffssteuerung

    Der User Sys_HFB_Development_User kann nur Stored Procedures ausführen. Damit sind

    sein Möglichkeiten unerlaubt Daten zu lesen oder zu ändern extrem eingeschränkt.

  • 7. Informationssicherheit: Vertraulichkeit

    3. Transparent Data Encryption

    Schutz der physischen Dateien mit AES-

    oder 3DES-Verschlüsselungsalgorithmen.

    Die Verschlüsselung erfolgt mit einem

    Datenbank-Verschlüsselungs-Schlüssel

    (DEK), der im Datenbank-Boot-Record

    gespeichert wird.

    Der DEK ist ein symmetrischer Schlüssel,

    der mit dem in der Master-Datenbank

    gespeicherten Zertifikat oder einem

    asymmetrischen Schlüssel gesichert ist. DEK

  • 7. Informationssicherheit: Vertraulichkeit

    5. Verschlüsselung Backup

    Es muss der Verschlüsselungsalgorithmus (AES 128, AES 192, AES 256, and

    Triple DES) und der Schlüssel/Zertifikat (gespeichert im SQL Server) angegeben

    werden:

    BACKUP DATABASE { database_name | @database_name_var } TO [ ,...n ] [ ] [ next-mirror-to ] [ WITH { DIFFERENTIAL

    | [ ,...n ] } ]

    BACKUP DATABASE [MYTestDB]

    TO DISK = N'C:\...\Backup\MyTestDB.bak'

    WITH

    COMPRESSION,

    ENCRYPTION ( ALGORITHM = AES_256,

    SERVER CERTIFICATE = BackupEncryptCert )

  • 7. Informationssicherheit: Vertraulichkeit

    6. Always Encrypted

    Always Encrypted ermöglicht es, Daten (z.B. ein Attribute) innerhalb von Client-

    Anwendungen zu verschlüsseln und die Schlüssel niemals an die Datenbank-Engine

    weiterzugeben (so hat auch kein DBA Zugriff auf die Daten).

    Ein auf dem Client installierter Always Encrypted-aktivierter Treiber erreicht dies durch die

    automatische Ver- und Entschlüsselung sensibler Daten.

    Der Column-Encryption-Key wird durch den Column-Master-Key verschlüsselt und in der

    DB abgelegt. Der Column-Master-Key wird Im Windows-Certificate-Store oder im Azure-

    Key-Vault abgelegt.

  • 7. Informationssicherheit: Vertraulichkeit

    7. Row-Level Security (RLS)

    Steuern den Zugriff auf Zeilen basierend auf den Eigenschaften des Benutzers (z.B.

    Datenbankrolle oder Windows-Domain-Gruppe).

    Zeilen können gefiltert oder vor Modifikationen

    geschützt werden.

    SELECT 1/(SALARY-100000) FROM PAYROLL WHERE NAME='John Doe'

    Problem:

    Obwohl ein Sicherheitsprädikat vorhanden ist, um zu verhindern, dass ein böswilliger

    Benutzer direkt das Gehalt anderer Personen abfragt, kann der Benutzer bestimmen,

    wann die Abfrage eine Division durch Null zurückgibt (Filter wirkt 'nachher').

  • Problem dynamisches Masking:

    Zitat MS: "It is appropriate for preventing accidental sensitive data exposure, but will not

    protect against malicious intent to infer the underlying data."

    7. Informationssicherheit: Vertraulichkeit

    8. Static und Dynamic Data Masking (DDM)

    Mit einer Masking-Regel wird ein Attribut 'verschleiert'.

    • Dynamisch: Zur Laufzeit (Abhängig von User-Rechten)

    • Statisch: Beim Kopieren (nicht umkehrbar)

    SELECT ID, Name, Salary FROM Employees

    WHERE Salary > 99999 and Salary < 100001;

  • 7. Informationssicherheit: Vertraulichkeit

    9. Vulnerability Assessment

    Überprüft die Einstellungen des SQL Servers auf Angriffspunkte.

  • 7. Informationssicherheit: Vertraulichkeit

    11. SQL Server Audits

    Das Überwachen einer Instanz oder Datenbank beinhaltet das Protokollieren von

    Ereignissen (z.B. Rechteänderungen).

  • 7. Informationssicherheit: Vertraulichkeit

    15. SQL Injections

    1. Input validieren (am besten in SP):

    • Inputstring 'untersuchen'

    • Folgende Zeichen wenn möglich verbieten oder Esacpen:

    ; ' -- /**/ xp_ und Metazeichen

    • Typensichere Parameter in Stored Procedures verwenden (werden als Literale

    interpretiert)

    • Parameter Collections bei dynamischen SQL verwenden

    2. Code Review bei dynamischem SQL:

    • Review aller EXECUTE-, EXEC- und sp_executesql-Befehle

    • QUOTENAME verwenden um gültige Identifier zu erzeugen QUOTENAME('abc[]def') = [abc[]]def]

    • Länge des Strings beachten, sonst wird z.B. WHERE-Bedingung gelöscht

    • …

    SqlDataAdapter myCommand = new SqlDataAdapter( "SELECT au_lname, au_fname FROM Authors WHERE au_id = @au_id", conn); SQLParameter parm = myCommand.SelectCommand.Parameters.Add("@au_id",

    SqlDbType.VarChar, 11);

  • 7. Informationssicherheit: Integrität

    Massnahmen:1. Daten selbst:

    1. Primärschlüssel, Unique Constraints

    2. referentielle Integrität, inkl. Kardinalitäten (z.B. 1:m)

    3. Domänenintegrität, eigene Domänen

    4. Constraints (CHECK-Clause)

    5. Trigger / Stored Procedures

    2. Transaktionen, ACID-Prinzip (Locking und Logging):

    3. SQL Server Data Quality Services (DQS)

    4. DBCC CHECKDB (z.B. für Supect Pages: Datenkorruption durch eine fehlerhafte I/O-Komponente),

    am besten als Maintenance-Plan

  • 7. Informationssicherheit: Integrität

    2. Transaktionen, ACID-Prinzip

    Isolationsebene Dirty

    Read

    Non-Repeatable

    Read

    Phantom

    Read

    Lost

    Update

    READ

    UNCOMMITTED

    möglich möglich möglich möglich

    READ

    COMMITTED

    verhindert möglich möglich verhindert

    REPEATABLE READ verhindert verhindert möglich verhindert

    SNAPSHOT verhindert verhindert verhindert n.a.

    SERIALIZABLE verhindert verhindert verhindert verhindert

    https://docs.microsoft.com/en-us/sql/relational-databases/sql-server-transaction-locking-and-row-

    versioning-guide?view=sql-server-2017

  • 7. Informationssicherheit: Integrität

    3. SQL Server Data Quality Services (DQS)

    Wissensbasierter Qualitätsservice: Korrektur, Anreicherung, Standardisierung

    und Deduplizierung von Daten

    Kennt Synonyme, gültige, ungültige Werte,

    Beziehungen zwischen den Werten und

    Geschäftsregeln. Dadurch können Fehler

    automatisch korrigiert werden.

  • 7. Informationssicherheit: Verfügbarkeit

    Massnahmen:1. Desaster Recovery: Backup,Restore

    2. Log-Shipping

    3. Always On Availability Groups (AG)

    4. Snapshot, Merge und Transactional Replication

    5. Federated Database Servers (Nicht länger supported)

    6. Sync Framework (In Extended Support, Alternative zu Transactional Replication?)

    7. Database Mirroring (In Maintenance Mode -> Always On / Transactional Replication)

  • 7. Informationssicherheit: Verfügbarkeit

    2. Log-Shipping

    Log-Shipping: Ermöglicht es, automatisch Transaktionsprotokoll-Backups von einer

    primären Datenbank an eine oder mehrere sekundäre Datenbanken auf separaten

    sekundären Serverinstanzen zu senden (z.B. alle 15 Minuten).

    Das Einspielen des Transaktionsprotokolls wird für jede der Sekundärdatenbanken einzeln

    durchgeführt.

    Eine optionale dritte Serverinstanz, der so genannte Monitorserver, zeichnet den Verlauf und

    den Status von Backup- und Wiederherstellungsvorgängen auf.

    Wenn die primäre Datenbank nicht mehr verfügbar ist,

    kann jede der sekundären Datenbanken manuell online

    gebracht werden (kein Failover).

    Die sekundäre Datenbank kann für Reportingzwecke

    verwendet werden.

  • 7. Informationssicherheit: Verfügbarkeit

    3. Always On Availability Groups (AG)

    Eine Verfügbarkeitsgruppe ist eine replizierter Satz von Benutzerdatenbanken. Diese kann

    für Hochverfügbarkeit (HA) oder für Read-Scaling angelegt werden. Die Datenbanken

    sind NICHT gleichberechtigt (Primary ist "Master").

    • HA-Verfügbarkeitsgruppe ist für Failover (bedingt Cluster-Manager, z.B. Windows Server

    Failover Cluster (WSFC))

    • Read-Scaling ist zur Performancesteigerung für schreibgeschütztes Lesen.

    Jedes Replikat hat einen Availabilty Mode:

    • Asynchronous-commit: Primary Replica wartet nicht auf andere Replika

    • Synchronous-commit: Primary Replica wartet nicht auf andere Replika

  • 7. Informationssicherheit: Verfügbarkeit

    4. Snapshot, Merge und Transactional Replication

    Die Replikation ist eine Reihe von Technologien zum Kopieren und Verteilen von Daten von

    einer Datenbank in eine andere und zum Synchronisieren zwischen Datenbanken, um die

    Konsistenz zu gewährleisten. Die Datenbanken sind NICHT gleichberechtigt (Publisher ist

    "Master").

    Snapshot Replication:

    Periodische

    Synchronisation

    Merge Replication: Snapshot plus

    Synchronisation mittels Triggern

    und Tracking Tables (asynchron)

    Transaction Replication:

    Snapshot plus Synchronisation

    in der Transaktion.

  • 7. Informationssicherheit: Verfügbarkeit

    5. Federated Database Servers

    Für Datenbanken, die ein hochverfügbares System unterstützen müssen, können Sie mit

    der Einrichtung eines Datenbankserver-Verbunds die Verarbeitungslast auf eine Gruppe von

    Servern verteilen, indem Sie die Daten horizontal partitionieren. Diese Server werden

    unabhängig voneinander verwaltet, arbeiten aber zusammen, um Anfragen an die

    Datenbank zu bearbeiten (SQL Server 2008).

  • 7. Informationssicherheit: Verfügbarkeit

    6. Sync Framework

    Umfassende Synchronisationsplattform, die Kollaborations- und Offline-Szenarien für

    Anwendungen, Dienste und Geräte ermöglicht. Entwickler können Sync-Systeme aufbauen,

    die jede Anwendung, jede Art von Daten und jedes Protokoll über jedes Netzwerk

    integrieren.

  • Fragen?

    Uff!