2015-12-08

All about Security in SQL Azure DB

Hi All
 
Since this is become more and more important for SQL Azure DB I am writing about 'Security Features in SQL Azure DB'.
 
I will put everything in a list and links for all features.
1)    Azure SQL Database security guidelines and limitations:
  a) Link: https://azure.microsoft.com/en-us/documentation/articles/sql-database-security-guidelines/.
  b) This link explain about: Firewall, Connection encryption and certificate validation, and some best Practices.
2)    Connecting to SQL Database: Best Practices and Design Guidelines:
  a) Link: https://azure.microsoft.com/en-us/documentation/articles/sql-database-connect-central-recommendations/
  b) This link bring few other links of the FW issue and connection Ports.
3)    Connecting to SQL Database By Using Azure Active Directory Authentication
  a) Link: https://azure.microsoft.com/en-us/documentation/articles/sql-database-aad-authentication/
  b) You have in this link few other links of the options to connect to SQL Azure DB :
    i)  With Password Authentication.
    ii) With Integrated Authentication.
    iii)SQL Authentication (https://azure.microsoft.com/en-us/documentation/articles/sql-database-manage-logins/).
4)    Security Features Within The SQL:
  a) Protect DATA
    i)TDE - Transparent Data Encryption: https://msdn.microsoft.com/en-us/library/dn948096.aspx. This is encryption in files level.
    ii)Always Encrypted: https://azure.microsoft.com/en-us/blog/microsoft-azure-sql-database-provides-unparalleled-data-security-in-the-cloud-with-always-encrypted/ & https://msdn.microsoft.com/en-us/library/mt163865.aspx .  This is encryption in filed level.
  b) Control Access:
    i)  Azure Active Directory: 3.a
    ii) Row Level Security: https://azure.microsoft.com/en-us/blog/row-level-security-for-sql-database-is-generally-available/ & https://msdn.microsoft.com/en-us/library/dn765131.aspx
    iii)Dynamic Data Masking: https://azure.microsoft.com/en-us/documentation/articles/sql-database-dynamic-data-masking-get-started-portal/ .
  c) Monitor Activity:
    i) Auditing: https://azure.microsoft.com/en-us/documentation/articles/sql-database-auditing-get-started/ I love this feature….
    ii)Threat Detection: https://azure.microsoft.com/en-us/blog/threat-detection-public-preview/.
5) Security Features Within The Portal – RBAC - Role-based Access Control:
    i)We can delete DB's via portal – so we need to understand the concept of RBAC: https://azure.microsoft.com/en-us/documentation/articles/role-based-access-control-configure/ & look for SQL in https://azure.microsoft.com/en-us/documentation/articles/role-based-access-built-in-roles/.
Security Center

Last and not least is the new Security Center. Insert into the Portal and go to the Security Center:
 
now we can see the wrong configurations for each type : VM's, network and DB
 
 
what the suggest now is the auditing and TDE features - if we enabled or disabled them.
 
 

 

Very nice feature
 
 
thanks.
 

2015-11-23

FailOver in SQL Azure DB with Geo Replication

Hi All
 
New feature was released lately - Fail Over in the Geo Replication in SQL Azure.
The Announcement is here:
 
 
As You can see they added Failover feature. That means that until today you have Primary and Secondary DB's, DATA moved on one direction and you could disconnect the connection when ever you wish. but then you have to build everything from the beginning, (you can look in my old post about geo-replications types in sql azure).
Now DATA moved backward, when you click Fail over - you still have 2 DB's but the Secondary become Primary and vise versa. I this this is a great feature.
you can also read in Hebrew about it in Geri's Reshef Blog
 
 
This is the new link
 
enjoy
 
 

2015-10-21

Extended Events in SQL Azure

Hi Everybody
 
Today an English post about 'Extended Events in SQL Azure', some of you shorten the name to 'EE' and some to 'XEvent'. I Love EE so this is how I will call it in this post.
 
This feature was introduce in SQL Server 2008 and its should help collecting DATA about what is running in the Server.
 
More Details about this SQL Server feature can be found in this Link: https://msdn.microsoft.com/library/bb630282.aspx?f=255&MSPPError=-2147217396
 
There are a few differences between EE in SQL Azure and regular SQL Server:
  1. In SQL Server versions the EE are on the Server level and therefore you create sessions on Server. In SQL Azure the server is a virtual entity - so the EE is in DB level and you create the session on DataBase.
  2. In SQL Server versions the EE can write to files on the server. SQL Azure does not have drives for files (SQL Azure is PAAS.....:-)). There is an option to write to blob storage, for this we need to grant special credentials.
  3. In SQL Server versions the EE uses some server level DMVs, as we wrote in point 1, we are in a virtual server entity, we have other new DMV's to use.
A few links to help explain things:
Below is an example that creates an event into the Buffer Pool (avoiding writing to blob storage) on DB errors (This is a only sample script...). The scripts create event, create error (ignore the error in the results) and select from the XML in the Buffer Pool that holds the DATA.
 
--Drop Session
IF EXISTS (SELECT * from sys.database_event_sessions WHERE name = 'ErrorWithSQL')
BEGIN
    DROP EVENT SESSION  [ErrorWithSQL]     ON DATABASE;
END

--Create Session
CREATE EVENT SESSION [ErrorWithSQL] ON DATABASE
ADD EVENT sqlserver.error_reported(
    ACTION(sqlserver.client_app_name,sqlserver.database_id,sqlserver.database_name,sqlserver.sql_text,sqlserver.username))
ADD TARGET
        package0.ring_buffer   (SET
                max_memory = 500   -- Units of KB.
            );
GO
--Start Session
ALTER EVENT SESSION [ErrorWithSQL]
    ON DATABASE
    STATE = START;
GO

--create error
select 1/0

--select from EE
declare @xml xml
SELECT @xml= CAST(target_data AS XML)
FROM  sys.dm_xe_database_session_targets AS t ;
--select @xml;
with MyCTE as (
 select tbl.xcol.query('.') TheXML,
 tbl.xcol.value('(@timestamp)[1]','datetime') as ErrorDate,
 tbl.xcol.value('(data[@name="error_number"]/value)[1]', 'int') as ErrorNumber,
 tbl.xcol.value('(data[@name="message"]/value)[1]', 'varchar(300)') as ErrorMessage,
 tbl.xcol.value('(action[@name="sql_text"]/value)[1]', 'varchar(300)') as SQLText,
  tbl.xcol.value('(action[@name="tsql_stack"]/value/frames/frame/@offsetStart)[1]','int') as OffsetStart,
 tbl.xcol.value('(action[@name="tsql_stack"]/value/frames/frame/@offsetEnd)[1]','int') as offsetEnd,
 tbl.xcol.value('(action[@name="tsql_stack"]/value/frames/frame/@handle)[1]','binary(64)') as SQLHandle,
 tbl.xcol.value('(action[@name="client_app_name"]/value)[1]', 'varchar(300)') as client_app_name,
 tbl.xcol.value('(action[@name="client_hostname"]/value)[1]', 'varchar(300)') as client_hostname,
 tbl.xcol.value('(action[@name="username"]/value)[1]', 'varchar(300)') as username
 from @xml.nodes ('/RingBufferTarget/event') tbl (xcol))
select top 100 * from MyCTE
order by ErrorDate desc
 
 
I was very happy to get this feature I think its a game changer.
 
Pini
 

2015-09-21

Deadlocks in SQL Azure V12

Hi All
 
Today I want to explain how to find and troubleshoot Deadlocks in SQL Azure V12. 
 
At V2 we had this query to run and find our deadlocks:
 
SELECT * FROM sys.event_log WHERE event_type = 'deadlock'
 
This query return XML, and we could have change it to XDL and see the deadlock Chart.
 
You can see this in the 2 links by Thomas Larock (@SQLRockstar):
 
 
&
 
Now in V12 this feature is not supported - so how do you get the deadlock data?
 
MSFT Gave us this query (Running on Master DB):
 
 
SELECT top 100 *,
CAST(event_data as XML).value('(/event/@timestamp)[1]', 'datetime2') AS timestamp
,CAST(event_data as XML).value('(/event/data[@name="error"]/value)[1]', 'INT') AS error
,CAST(event_data as XML).value('(/event/data[@name="state"]/value)[1]', 'INT') AS state
,CAST(event_data as XML).value('(/event/data[@name="is_success"]/value)[1]', 'bit') AS is_success
,CAST(event_data as XML).value('(/event/data[@name="database_name"]/value)[1]', 'sysname') AS database_name, CAST(event_data as XML)
FROM sys.fn_xe_telemetry_blob_target_read_file('el', null, null, null)
where object_name = 'database_xml_deadlock_report'
order by CAST(event_data as XML).value('(/event/@timestamp)[1]', 'datetime2') desc

 

 
We get XML and can use it or its graphical view (save as xdl).
 
This is written in some delay.
 
This is new  and Un documented fn, that reads the event log from BLOB (as I understand), so this is actually the first look of EE in SQL Azure.
 
Enjoy and Thanks to Geri Resef, helped me with this.
 
Pini
 
 

2015-09-09

Managing Versions in SQL Azure

שלום לכולם
והיום על versions.
קיימים שלושה מספרים המייצגים את version של ה sql שלך:

  • Select @@version --> Microsoft SQL Azure (RTM) - 12.0.2000.8   Sep  2 2015 20:51:51   Copyright (c) Microsoft Corporation 
  • select  DATABASEPROPERTYEX(db_name(), 'Version')  --> number like 826 or any other
  • The Performance tier
שלושה מספרים אלו מייצגים את מספר גרסת ה sql ברמת בסיס נתונים כאשר ייתכן שתהיה אותה ורסיה אולם מספר שונה - ואפילו באותו שרת ייתכנו שינויים בין בסיס נתונים.

למה זה חשוב? לא באמת זה חשוב ולא באמת זה מועיל - אבל יש פה כמה היבטים - ראשית אפשר ללמוד הרבה מהגלגולים ופריסת הגרסאות הרבה ויחד עם זאת אפס אחוז  downtime.

שנית כאשר ישנה תקלה יותר נוח למסור ישר את 3 המספרים אלו ואז הטיפול יהיה ממש מהיר - הם יוכלו לזהות במהירות מצי נפרסה הגרסה וכך לזהות בעיות שיכלו להתרחש.

ועכשיו ארחיב לגבי הנקודה השלישית.

אם תיראו בפוסט הקודם הזכרתי את 3 הגרסאות שקיימות היום ב SQL Azure.
  • web\ business
  • V2 - basic\ standard S1\ Standard S2\ Premium P1\ Premium P2\ Premium P3
  • V12 - basic\ standard S0\ standard S1\ Standard S2\ standard S3\ Premium P1\ Premium P2\ Premium P3\ Premium P4\ Premium P6\ Premium P11
ישנם מספר הבדלים בין השכבות השונות (אצרף מספר לינקים חשובים בהמשך הפוסט) :
  • ה - DTU שהסברתי עליו בפוסטים קודמים.
  • גודל מקסימלי של בסיס הנתונים האפשרי.
  • זמן בו אפשר לעשות ריסטור לתקופה מסוימת.
  • type of geo replication
  • קבצי לוג שיושבים על SSD בשכבות מסוימות.
  • V12 - הוא קומפטבילי לגמרי לגרסה האחרונה של sql וכולל את כל החידושים שיהיו ב 2016
  • עלויות - כמובן :-) .
מה שחשוב להבין הוא שהדברים מעצם היותם בענן הם דינמיים. יש שינויים וחידושים כל הזמן, וצריך לדעת מהיכן לקבל את המידע. וגם להיכנס לראש הזה שפתאום בסיס הנתונים הוא אפליקציה דינמית מתעדכנת בתדירות גבוהה.

מצורפת טבלה מתוך הלינק הזה:

זו טבלת ה"גזור והדבק" למי שעובד עם SQL Azure.
פה אפשר להבין מה רמת הביצועים שיכולה להיות בבסיס הנתונים הרלוונטי.
לא לשכוח שגם טבלה זו היא דינמית - הנה השבוע הוסיפו p11 והוא עוד לא מעודכן בטבלה הזו.

Service Tier/Performance Level
DTU
MAX DB Size
Max Concurrent Requests
Max Concurrent Logins
MaxSessions
Benchmark Transaction Rate
Predictability
Basic
5
2 GB
30
30
300
16,600 transactions per hour
Good
Standard/S0
10
250 GB
60
60
600
521 transactions per minute
Better
Standard/S1
20
250 GB
90
90
900
934 transactions per minute
Better
Standard/S2
50
250 GB
120
120
1,200
2,570 transactions per minute
Better
Standard/S3
100
250 GB
200
200
2,400
5,100 transactions per minute
Better
Premium/P1
125
500 GB
200
200
2,400
105 transactions per second
Best
Premium/P2
250
500 GB
400
400
4,800
228 transactions per second
Best
Premium/P4
500
500 GB
800
800
9,600
447 transactions per second
Best
Premium/P6 (formerly P3)
1000
500 GB
1,600
1,600
19,200
735 transactions per second
Best


עוד טבלה חשובה היא טבלת העלויות היא נמצאת בלינק הזה:

גם זו טבלה של "גזור הדבק"



DATABASE THROUGHPUT UNITS
DATABASE SIZE
POINT IN TIME RESTORE
PRICE
B
5
2 GB
7 Days
$0.0067/hr (~$5/mo)
S0
10
250 GB
14 Days
$0.0202/hr (~$15/mo)
S1
20
250 GB
14 Days
$0.0403/hr (~$30/mo)
S2
50
250 GB
14 Days
$0.1008/hr (~$75/mo)
S3
100
250 GB
14 Days
$0.2016/hr (~$150/mo)
P1
125
500 GB
35 Days
$0.625/hr (~$465/mo)
P2
250
500 GB
35 Days
$1.25/hr (~$930/mo)
P4
500
500 GB
35 Days
$2.50/hr (~$1,860/mo)
P6
1000
500 GB
35 Days
$5/hr (~$3,720/mo)
P11
1750
1 TB
35 Days
$9.41/hr (~$7,001/mo)


כמו שרואים החיוב הוא בעיקרון לפי שעת שימוש - החל מזמן הלחיצה על כפתור שינוי הגירסה עד שתלחץ פקודה וכפתור לשכבת ביצועים אחרת.

מידע מעניין נוסף זה מספר הגירסה שרואים ב SSMS... שימו לב מספר הגירסה של השרת שרואים ב SSMS מול שרתים ב AZURE, תלוי בגרסת ה SSMS שיש לך.
אם זה 2012 תראה על גירסה אחת 13.00
ועל אותו שרת אם זה ssms2014 תראה 12.00
לכן הכי חשוב להריץ @@version
ולדעת...
אם זה באמת מעניין אותכם.
זהו להיום
נסו ותהנו