Security-Fixes for SQL Server and why Security Best Practices Matter / Sicherheitsfixe für SQL Server und warum Sicherheits Best Practices wichtig sind (MS15-058 SQL Server Security Bulletin)

Ziemlich genau ein Jahr nachdem die für 5 Jahre ersten Sicherheits-Bugs in SQL Server gefixt werden mussten, gibt es nun, seit 14.7.2015, wieder einen Grund, seine Security-Patching-Policy zu testen.

- Wenn man denn eine solche für SQL Server hat.

Und damit möchte ich jetzt niemanden anprangern. Denn: die letzten Jahre waren wir aufgrund des Mangels an Sicherheit bedingten Fixen in SQL Server schlicht verwöhnt. Sicherheitslecks (zumindest solche, die bekannt geworden sind), sind seit SQL Server 2000 so gut wie nicht mehr aufgetreten.

- Dazu gibt es diverse Statistiken und Aufsätze, wie diesem von dem amerikanischen Sicherheitsexperten David Litchfield (www.davidlitchfield.com/security.htm) oder dem ITIC-Report von 2010: SQL Server Most Secure Database; Oracle Least Secure Database Since 2002 oder auch die Statistik vom NIST (National Institute of Standards and Technology) von 2013, auf der die folgende Grafik basiert:

Durch 5 Jahre in Folge als sicherstes Datenbanksystem auf Basis der NIST-Daten, mag der SQL Server in Sachen Sicherheitspatching durchaus aus dem Fokus der Administratoren gewandert sein.

Der Security Bulletin vom Juli 2015:

Vulnerabilities in SQL Server Could Allow Remote Code Execution (3065718)

https://technet.microsoft.com/en-us/library/security/MS15-058

Beschrieben werden 3 Sicherheitslecks:

Welche SQL Server Versionen sind betroffen?

Die Liste, beginnend mit SQL Server 2008 Service Pack 3 und endend mit SQL Server 2014 findet sich im Bulletin.
Genauer kann man anhand seiner jeweiligen SQL Engine Nummer in diesem Blog-Artikel von Microsoft suchen:

http://blogs.msdn.com/b/sqlreleaseservices/archive/2015/07/14/ms15-058-sql-server-security-bulletin-released.aspx

Unter welchen Umständen kann ein System durch diese Lücken angegriffen werden?

Die Voraussetzungen sind für die 3 Sicherheitslecks natürlich unterschiedlich und auch (absichtlich) nicht bis ins letzte Detail beschrieben.
WAS man jedoch herauslesen kann, ist, dass diejenigen, die Rechte nur sehr feingradig und dediziert gesetzt haben, wesentlich weniger angreifbar sind, da teilweise Schemaänderungsrechte im Datenbank-Bereich Voraussetzungen sind.
Daher erinnere ich an dieser Stelle gern daran, dass man weise beraten ist, wirklich nur benötigte Rechte zu vergeben, und Schemas als Sicherheitsbereiche zu verstehen. Die Verwendung von db_owner beispielsweise sollte Tabu für Applikations-Benutzer sein.
Wer solche Regeln bisher beherzigt hat, kann sich auch weiterhin einigermaßen sicher fühlen, da die Möglichkeit, diese Sicherheitslecks auszunutzen somit stark verringert ist.

Deswegen sollte man Best Practices für Sicherheit immer beherzigen.
Eine vulnerability ist eben noch kein exploit.

Hier noch ein paar Links in Sachen Security in SQL Server:

Securing SQL Server

SQL Server Security Blog

SQL Server Best Practices – Implementation of Database Object Schemas

SQL Server 2012 Security Best Practices – Operational and Administrative Tasks 

SQL Server 2012 Label Security Toolkit and white paper

SQL Server Database Ownership: recommendations

Guest account in User Databases

 

Happy patching

Andreas

SQL Server 2016 – the Security & Performance Release / ein Sicherheits- und Performance-Release

(DE)
Seit Anfang Mai ist es offiziell: Satya Nadella hat auf der Microsoft Ignite-Konferenz in Chicago den SQL Server 2016 vorgestellt.
Und ich kann jetzt schon sagen, dass der SQL Server 2016 eines der in meinen Augen spannendsten Releases werden wird. Und zwar weil diesmal Sicherheit ganz klar mit im Fokus steht. Sicherheitsfeatures gehören neben Performance-Features zu den „Key Capabilities“ des kommenden SQL Server, so dass ich den SQL Server 2016 gern ein „Sicherheit & Performance-Release“ nenne.

(EN)
The news broke in early May: That’s when Satya Nadella presented SQL Server 2016 at the Microsoft Ignite-Conference in Chicago.
I can already say that SQL Server 2016 will be one of the most exciting releases in recent years. And that’s because this time it’s clearly focused on security. Next to performance features, security features are among the “Key Capabilities” of the upcoming SQL Server. I like to call SQL Server 2016 a “Security & Performance-Release.”

 



Die Schlüsselfeatures sind demnach:


Always Encrypted


Mit diesem Feature ist es endlich möglich, eine Datenverschlüsselung anzubieten, bei der SQL Server selber keinen Zugriff auf die Daten im unverschlüsselten Zustand hat – und auch ein Datenbankadministrator Daten nicht entschlüsseln kann. Der Schlüssel wird hierbei in der Applikation bereitgehalten, wo die Verschlüsselung und Entschlüsselung stattfindet. Das war bisher nur mit eigenen Entwicklungen möglich.



Its key features are:


Always Encrypted


With this feature it is finally possible to offer encrypted data where SQL Server itself does not have access to the data in unencrypted form and where the database administrator is incapable of decrypting the data. The key is held within the very application where the encryption and decryption takes place. Up to now encryption/decryption was only possible if users developed solutions on their own.



Stretch Database


Stretched Tables bieten die Möglichkeit, innerhalb einer Tabelle Daten sowohl On-Premise als auch in der Cloud zu halten. Ähnlich wie bei Partitionierung wird hier transparent für die Applikation ein Teil der Daten nach Microsoft Azure ausgelagert, und nur dann geladen, wenn nötig. – Hier sollte man also sicherstellen, mit ungünstigen Abfragen keine Index-Scans in die Cloud zu verursachen.



Stretch Database


Stretched Tables offer the option to store data in a given table both On-Premise and in the Cloud. Similar to partitioning, part of the data will be swapped to Microsoft Azure, transparently to the application, and only accessed when necessary. Here it might be advisable to avoid causing index-scans to the cloud with badly designed queries.



Um die Daten zu schützen funktionieren Stretched Tables auch im Zusammenspiel mit Always Encrypted. Es bleibt abzuwarten, wie dieses Feature die Hemmungen, Daten in die Cloud zu geben, beeinflusst. Microsoft selber hat jedenfalls sicherlich kein Interesse daran, den Zugang zu seinen Systemen für Geheimdienste zu vereinfachen, und Always Encrypted dürfte ein klares Signal sein.



To protect the data, Stretched Tables also work together with Always Encrypted. It remains to be seen, how this feature affects the inhibition to give data to the cloud. Microsoft itself surely has no interest to make access to its systems simple for intelligence, and Always Encrypted should be a clear signal.



Real-time Operational Analytics & In-Memory OLTP


Unter diesem Feature verbirgt sich die Verheiratung der beiden „Performance-Killer“ Features Columnstore Indexe – für OLAP-Szenarien – und Memory Optimized Tabellen für In-Memory OLTP. Das heißt damit sind performante analytische Abfragen auf den frischen OLTP Daten in In-Memory möglich. In meinen Augen ist dieses Feature der Killer überhaupt, da Indexe auf den Tabellen direkt synchron sein müssen, und nicht, wie bei manch anderem Anbieter von In-Memory Datenbanken, erst mit Verzögerung die Daten erhalten. Auf dem PASS Summit 2014 war dieses Feature bereits kurz zu sehen, jedoch erst jetzt ist es offiziell und hat einen Namen.



Real-time Operational Analytics & In-Memory OLTP


Under this feature lies the marriage of the two „performance-killer“ features Columnstore Indexes – for OLAP-Scenarios – and Memory Optimized Tables for In-Memory OLTP. This enables for fast analytical queries on the fresh OLTP data in In-Memory. In my eyes this feature is the ultimate killer, since indexes on the tables have to be synchronous and not, like at some other vendors of In-Memory databases, only receive the data after a certain delay. At PASS Summit 2014 this features was already biefly presented, but only now it is official and has a name.



 


 



Das waren die Highlights, jedoch ist die Liste der weiteren neuen Features noch lang, und auch diese haben es in sich. Ich versuche, die wichtigsten einmal aufzulisten:



Those were the highlights, but the list of further new features is still long and highly potential. I try to list the most important ones:



Verbesserungen zu Columnstore Indexes


  • Nicht-parallelisierte Abfragen können den Batch-Mode verwenden
  • AlwaysOn Readable Secondary unterstützen beschreibbare Columnstore Indexe
  • Columnstore Indexe auf einer Memory-Optimized Table möglich - nur im InterOP Mode verwendbar
  • Filtered Nonclustered Columnstore Indexes
  • Primary und Foreign Keys-Unterstützung


Improvements to Columnstore Indexes


  • Single-threaded queries can use batch mode
  • AlwaysOn readable secondary support updateable columnstore indexes
  • Columnstore indexes possible on memory-optimized table – only works in InterOP mode
  • Filtered Nonclustered Columnstore Indexes
  • Support for primary and foreign keys


Verbesserungen für In-Memory OLTP


  • ALTER TABLE und ALTER Procedure Operationen
    • Z.B. zum Ändern des Bucket counts von Hash Indexen
    • Multithreaded Writes und Merge-Prozess
    • Parallele Pläne
    • Fremdschlüssel auf In-Memory Tabellen
    • Viele weitere Verbesserungen Hinsichtlich T-SQL Support



Improvements for In-Memory OLTP


  • ALTER and ALTER Procedure Operations
    • i.e. to change the bucket counts of hash indexes
    • Multithreaded Writes and Merge-process
    • parallel plans
    • foreign keys on In-Memory tables
    • many more improvements in terms of T-SQL support




Und weitere neue Security-Features:


Dynamic Data Masking


Damit lässt sich, basierend auf Policies, definieren, dass je nach User bestimmte Daten nur maskiert angezeigt werden.



And further new Security-Features:


Dynamic Data Masking


Based on Policies allow to define that depending on the user certain data is only shown maked.



Row-Level Security


Row-Level Security (RLS) ist um genau zu sein ein Feature um die Entwicklung von Zeilenbasierten Zugriffsmechanismen wesentlich zu vereinfachen und aus der Applikation in die Datenbank zu verlagern. In der jetzigen Implementation ist es noch recht einfach, über Side-Channel Attacken dennoch an die Daten heranzukommen. Daher muss man, wie eigentlich immer bei Sicherheits-Design, alle Bestandteile der Applikation im Blick haben.


Warum eine wirklich sichere Zeilenbasierte Zugriffskontrolle nicht so trivial ist, kann man unter anderem in diesem Blog-Post von mir nachlesen:



Row-Level Security


Row-Level Security (RLS) is, to be exact, a feature to greatly simplify the development of row-based access-control, and move from the application into the database. In the current implementation it is still quite easy, to get via Side-Channel Attacks to the data. Therefore, as always when designing for security, one has to have an eye on all parts of the application.


Why a truly secure row-based access control is far from trivial, one can find out among others in this blog-post of me:



 SQL Server Row- and Cell-Level Security – Disclosure vulnerability



Weitere Features in verschiedenen Bereichen:


PolyBase


Abfragen von relationalen und Nicht-relationalen Daten in Hadoop-Clustern mit T-SQL über sogenannte External Tables.



Further features in different areas:


PolyBase


Querying of relational and non-relational data in Hadoop-Clusters with T-SQL via so-called External Tables.



Query Store


Dieses Feature wurde schon mehrere Male von Conor Cunningham auf verschiedenen Konferenzen angedeutet. Jetzt kommt es wirklich.
Wenn eingestellt (pro Datenbank), werden im Hintergrund automatisch Abfragen und deren Pläne sowie Ausführungsstatistiken gesammelt, so dass man diese später nachvollziehen kann. Zusätzlich dazu kann man sehr leicht einen identifizierten Abfrageplan wiederverwenden.



Query Store


This feature has been presented several times at different conferences by Conor Cunningham. Now it is finally coming into the product.
Once activated, it automatically captures queries together with their plans and runtime statistics, thus allowing for later review of them. Added to that one can easily re-use an identified query plan.



 


 



Live Query Statistics


Im SQL Server 2016 erwecken Ausführungspläne „zum Leben“. Das lässt sich am besten mit einem Bild/Video veranschaulichen:



Live Query Statistics


In SQL Server 2016 query plans „come to live“. This is illustrated best with a picture/video:



 


 



Temporal Tables


Mit Temporal Tables werden Daten automatisch versioniert und stehen später für Abfragen nach Zeitraum der Gültigkeit zur Verfügung. Ähnlich, wie man es für Slowly Changing Dimensions/SCDs (Langsam veränderliche Dimensionen) in Datawarehouses selber oft entwirft.



Temporal Tables


With Temporal Tables data is automatically versioned and available for later querying based on time-span of validity. Similar to how one often designs oneself manually for Slowly Changing Dimensions/SCDs in Datawarehouses.



 


 



Trace Flag 4199, welches seit SQL Server 2005 SP3 CU 6 für alle SQL Server Installationen relevant ist, da es diverse Fixe des Query Prozessors erst aktiviert soll mit dem SQL Server 2016 kaum noch nötig sein. Warten wir auf Details, um das beurteilen zu können.



Trace Flag 4199, which is relevant for all SQL Server Installations since SQL Server 2005 SP3 CU 6, since it enables certain fixes of the query processor is supposedly mainly unnecessary for SQL Server 2016. Let’s wait for details for a final judgement.



Multiple Tempdb Datendateien


Bei der Installation wird direkt nachgefragt, wie viele TempDB Datendateien angelegt werden sollen. Standardmäßig wird hier die Anzahl der Cores mit einem Maximum von 8 verwendet. Damit werden auch weniger versierte Administratoren auf die Thematik von Latch-Contention in der Tempdb aufmerksam, und eine wichtige Best Practice wird damit standardmäßig angewandt.



Multiple Tempdb Data Files


Already at Setup one has to specify how many TempDB data files will be created. By default the number of cores with a maximum of 8 will be used. BY that that also less experienced administrators will become aware of  Latch-Contention in Tempdb, and an important Best Practice is applied by default.



 


 



Hochverfügbarkeit


  • 3 Synchrone Replicas
  • Unterstützung für Group Managed Service Accounts für AlwaysOn Failover Cluster
  • AlwaysOn Availability Groups unterstützen Distributed Transactions und DTC auf Windows Server 2016
  • AlwaysOn Availability Group Failover bei Database Offline
  • ReadOnly Replikas können im Round-Robin-Verfahren angesprochen werden


High Availability


  • 3 synchronous replicas
  • Support for Group Managed Service Accounts for AlwaysOn Failover Cluster
  • AlwaysOn Availability Groups support Distributed Transactions and DTC on Windows Server 2016
  • AlwaysOn Availability Group Failover on Database Offline
  • ReadOnly Replicas can be addressed in Round-Robin-manner


T-SQL


  • Formatieren von Query Resultsets als JSON – ähnlich wie XML. Und möglicherweise wird es ein ähnliches Nischendasein erleiden. Hier sollte man auch an die, im Verhältnis zu einem Applikation-Server, teuren CPU-Lizenzen denken.


T-SQL


  • Formatting of Query Resultsets as JSON – similar to XML. And maybe it will stay niched in a similar manner. Here one should think of the, expensive CPU-licences compared to an Applikation-Server


 



 



  •  TRUNCATE TABLE auf Partitionsebene
  •  ALTER COLUMN und viele weitere DDL-Befehle können nun Online erfolgen
  • Neue Query Hints MIN_GRANT_PERCENT und MAX_GRANT_PERCENT
  • Transparent Data Encryption unterstützt nun die Intel AES-NI Hardware Acceleration Instruction Sets
  •  Mit dem Kauf von Revolution Analytics soll die Programmiersprache R in SQL Server 2016 integriert werden, um direkt aus der Datenbank spezielle analytische Abfragen zu starten – siehe dazu auch mein 2. Kommentar zu JSON


  • TRUNCATE TABLE on partition level
  • ALTER COLUMN and many more DDL-commands can now happen online
  • New Query Hints MIN_GRANT_PERCENT and MAX_GRANT_PERCENT
  •  Transparent Data Encryption supports Intel AES-NI Hardware Acceleration Instruction Sets
  • With the purchase of Revolution Analytics the programming language R shall be integrated into SQL Server 2016, to start special analytical queries directly from within the database – also see my 2nd comment on JSON to that



 



Analysis Services


·       Paralleles Processing (Aufbereiten) für multiple Table Partitions in Tabular Modellen


·       Neue DAX Funktionen