.NET 2 MS SQL Server (2017)radar.zhaw.ch/~rege/dnet_fs19/DNET2_0405.pdf · 2019. 3. 14. · 1989:...
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!