Skip to content

Commit a91c23a

Browse files
committed
Merge pull request Azure#1256 from yaakoviyun/dev
Threat Detection new API + data masking chganges
2 parents b8ffaf1 + fae57c3 commit a91c23a

File tree

42 files changed

+36215
-15385
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+36215
-15385
lines changed

ChangeLog.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
* Azure SQL Database: new cmdlets for managing database threat detection policies:
2+
* Get-AzureRmSqlDatabaseThreatDetectionPolicy
3+
* Set-AzureRmSqlDatabaseThreatDetectionPolicy
4+
* Remove-AzureRmSqlDatabaseThreatDetectionPolicy
5+
16
## 2015.11.09 version 1.0.1
27
* Azure Compute
38
* Added cmdlets for managing VM DiskEncryption extension

src/ResourceManager/Sql/Commands.Sql.Test/Commands.Sql.Test.csproj

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@
7373
<Private>True</Private>
7474
</Reference>
7575
<Reference Include="Microsoft.Azure.Management.Sql">
76-
<HintPath>..\..\..\packages\Microsoft.Azure.Management.Sql.0.39.0-prerelease\lib\net40\Microsoft.Azure.Management.Sql.dll</HintPath>
76+
<HintPath>..\..\..\packages\Microsoft.Azure.Management.Sql.0.41.0-prerelease\lib\net40\Microsoft.Azure.Management.Sql.dll</HintPath>
7777
</Reference>
7878
<Reference Include="Microsoft.Azure.Management.Storage">
7979
<HintPath>..\..\..\packages\Microsoft.Azure.Management.Storage.2.4.0-preview\lib\net40\Microsoft.Azure.Management.Storage.dll</HintPath>
@@ -189,11 +189,15 @@
189189
<DesignTime>True</DesignTime>
190190
<DependentUpon>Resources.resx</DependentUpon>
191191
</Compile>
192+
<Compile Include="ScenarioTests\ThreatDetectionTests.cs" />
192193
<Compile Include="ScenarioTests\DatabaseActivationTests.cs" />
193194
<Compile Include="ScenarioTests\DatabaseBackupTests.cs" />
194195
<Compile Include="ScenarioTests\DatabaseReplicationTests.cs" />
195196
<Compile Include="ScenarioTests\DatabaseCrudTests.cs" />
196197
<Compile Include="ScenarioTests\DataMaskingTests.cs" />
198+
<None Include="ScenarioTests\ThreatDetectionTests.ps1">
199+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
200+
</None>
197201
<None Include="ScenarioTests\DatabaseReplicationTests.ps1">
198202
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
199203
</None>
@@ -445,10 +449,7 @@
445449
<None Include="SessionRecords\Microsoft.Azure.Commands.Sql.Test.ScenarioTests.DataMaskingTests\TestDatabaseDataMaskingNumberRuleLifecycle.json">
446450
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
447451
</None>
448-
<None Include="SessionRecords\Microsoft.Azure.Commands.Sql.Test.ScenarioTests.DataMaskingTests\TestDatabaseDataMaskingPolicyEnablementToggling.json">
449-
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
450-
</None>
451-
<None Include="SessionRecords\Microsoft.Azure.Commands.Sql.Test.ScenarioTests.DataMaskingTests\TestDatabaseDataMaskingPrivilegedLoginsChanges.json">
452+
<None Include="SessionRecords\Microsoft.Azure.Commands.Sql.Test.ScenarioTests.DataMaskingTests\TestDatabaseDataMaskingPrivilegedUsersChanges.json">
452453
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
453454
</None>
454455
<None Include="SessionRecords\Microsoft.Azure.Commands.Sql.Test.ScenarioTests.DataMaskingTests\TestDatabaseDataMaskingRuleCreationFailures.json">
@@ -514,6 +515,11 @@
514515
<None Include="SessionRecords\Microsoft.Azure.Commands.Sql.Test.ScenarioTests.ServerCrudTests\TestServerUpdate.json">
515516
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
516517
</None>
518+
<None Include="SessionRecords\Microsoft.Azure.Commands.Sql.Test.ScenarioTests.ThreatDetectionTests\DisablingThreatDetection.json" />
519+
<None Include="SessionRecords\Microsoft.Azure.Commands.Sql.Test.ScenarioTests.ThreatDetectionTests\InvalidArgumentsThreatDetection.json" />
520+
<None Include="SessionRecords\Microsoft.Azure.Commands.Sql.Test.ScenarioTests.ThreatDetectionTests\ThreatDetectionDatabaseGetDefualtPolicy.json" />
521+
<None Include="SessionRecords\Microsoft.Azure.Commands.Sql.Test.ScenarioTests.ThreatDetectionTests\ThreatDetectionDatabaseUpdatePolicy.json" />
522+
<None Include="SessionRecords\Microsoft.Azure.Commands.Sql.Test.ScenarioTests.ThreatDetectionTests\ThreatDetectionOnV2Server.json" />
517523
<None Include="SessionRecords\Microsoft.Azure.Commands.Sql.Test.ScenarioTests.TransparentDataEncryptionCrudTests\TestDatabaseTransparentDataEncryptionGet.json">
518524
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
519525
</None>

src/ResourceManager/Sql/Commands.Sql.Test/ScenarioTests/AuditingTests.cs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,6 @@ namespace Microsoft.Azure.Commands.Sql.Test.ScenarioTests
2222
{
2323
public class AuditingTests : SqlTestsBase
2424
{
25-
protected Microsoft.Azure.Management.Storage.StorageManagementClient GetStorageV2Client()
26-
{
27-
var client = TestBase.GetServiceClient<Microsoft.Azure.Management.Storage.StorageManagementClient>(new CSMTestEnvironmentFactory());
28-
if (HttpMockServer.Mode == HttpRecorderMode.Playback)
29-
{
30-
client.LongRunningOperationInitialTimeout = 0;
31-
client.LongRunningOperationRetryTimeout = 0;
32-
}
33-
return client;
34-
}
35-
3625
protected override void SetupManagementClients()
3726
{
3827
var sqlCSMClient = GetSqlClient();

src/ResourceManager/Sql/Commands.Sql.Test/ScenarioTests/Common.ps1

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,19 @@ function Get-SqlAuditingTestEnvironmentParameters ($testSuffix)
2525
}
2626
}
2727

28+
<#
29+
.SYNOPSIS
30+
Gets the values of the parameters used at the threat detection tests
31+
#>
32+
function Get-SqlThreatDetectionTestEnvironmentParameters ($testSuffix)
33+
{
34+
return @{ rgname = "sql-td-cmdlet-test-rg" +$testSuffix;
35+
serverName = "sql-td-cmdlet-server" +$testSuffix;
36+
databaseName = "sql-td-cmdlet-db" + $testSuffix;
37+
storageAccount = "tdcmdlets" +$testSuffix
38+
}
39+
}
40+
2841
<#
2942
.SYNOPSIS
3043
Gets the values of the parameters used by the data masking tests
@@ -78,6 +91,28 @@ function Create-TestEnvironmentWithStorageV2 ($testSuffix)
7891
New-AzureRmStorageAccount -Name $params.storageAccount -Location "West US" -ResourceGroupName $params.rgname -Type "Standard_GRS"
7992
}
8093

94+
<#
95+
.SYNOPSIS
96+
Creates the test environment needed to perform the Sql threat detection tests, while using storage V2 as the used storage account
97+
#>
98+
function Create-ThreatDetectionTestEnvironmentWithStorageV2 ($testSuffix, $serverVersion = "12.0")
99+
{
100+
$params = Get-SqlThreatDetectionTestEnvironmentParameters $testSuffix
101+
New-AzureRmResourceGroup -Name $params.rgname -Location "Australia East" -Force
102+
103+
if ($serverVersion -eq "12.0")
104+
{
105+
New-AzureRmResourceGroupDeployment -ResourceGroupName $params.rgname -TemplateFile ".\Templates\sql-ddm-test-env-setup.json" -serverName $params.serverName -databaseName $params.databaseName -EnvLocation "Australia East" -Force
106+
New-AzureRmStorageAccount -Name $params.storageAccount -Location "Australia East" -ResourceGroupName $params.rgname -Type "Standard_GRS"
107+
}
108+
109+
if ($serverVersion -eq "2.0")
110+
{
111+
New-AzureRmResourceGroupDeployment -ResourceGroupName $params.rgname -TemplateFile ".\Templates\sql-audit-test-env-setup.json" -serverName $params.serverName -databaseName $params.databaseName -EnvLocation "Australia East" -Force
112+
New-AzureRmStorageAccount -Name $params.storageAccount -Location "West US" -ResourceGroupName $params.rgname -Type "Standard_GRS"
113+
}
114+
}
115+
81116
<#
82117
.SYNOPSIS
83118
Creates the test environment needed to perform the Sql data masking tests
@@ -214,8 +249,24 @@ function Remove-TestEnvironment ($testSuffix)
214249
{
215250
try
216251
{
217-
$params = Get-SqlAuditingTestEnvironmentParameters $testSuffix
218-
Azure\Remove-AzureRmStorageAccount -StorageAccountName $params.storageAccount
252+
$params = Get-SqlAuditingTestEnvironmentParameters $testSuffix
253+
Azure\Remove-AzureRmStorageAccount -StorageAccountName $params.storageAccount
254+
}
255+
catch
256+
{
257+
}
258+
}
259+
260+
<#
261+
.SYNOPSIS
262+
Removes the test environment that was needed to perform the Sql threat detection tests
263+
#>
264+
function Remove-ThreatDetectionTestEnvironment ($testSuffix)
265+
{
266+
try
267+
{
268+
$params = Get-SqlThreatDetectionTestEnvironmentParameters $testSuffix
269+
Azure\Remove-AzureRmStorageAccount -StorageAccountName $params.storageAccount
219270
}
220271
catch
221272
{

src/ResourceManager/Sql/Commands.Sql.Test/ScenarioTests/DataMaskingTests.cs

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,11 @@ namespace Microsoft.Azure.Commands.Sql.Test.ScenarioTests
2020
{
2121
public class DataMaskingTests : SqlTestsBase
2222
{
23-
24-
[Fact]
25-
[Trait(Category.AcceptanceType, Category.BVT)]
26-
public void TestDatabaseDataMaskingPolicyEnablementToggling()
27-
{
28-
RunPowerShellTest("Test-DatabaseDataMaskingPolicyEnablementToggling");
29-
}
30-
3123
[Fact]
3224
[Trait(Category.AcceptanceType, Category.BVT)]
33-
public void TestDatabaseDataMaskingPrivilegedLoginsChanges()
25+
public void TestDatabaseDataMaskingPrivilegedUsersChanges()
3426
{
35-
RunPowerShellTest("Test-DatabaseDataMaskingPrivilegedLoginsChanges");
27+
RunPowerShellTest("Test-DatabaseDataMaskingPrivilegedUsersChanges");
3628
}
3729

3830
[Fact]

src/ResourceManager/Sql/Commands.Sql.Test/ScenarioTests/DataMaskingTests.ps1

Lines changed: 13 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -12,65 +12,11 @@
1212
# limitations under the License.
1313
# ----------------------------------------------------------------------------------
1414

15-
<#
16-
.SYNOPSIS
17-
Tests toggling of the enablement property of a data masking policy
18-
#>
19-
function Test-DatabaseDataMaskingPolicyEnablementToggling
20-
{
21-
# Setup
22-
$testSuffix = 77732
23-
$params = Create-DataMaskingTestEnvironment $testSuffix
24-
25-
try
26-
{
27-
# Test create as enabled
28-
Set-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName -DataMaskingState "Enabled"
29-
$policy = Get-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName
30-
31-
# Assert
32-
Assert-AreEqual $policy.DataMaskingState "Enabled"
33-
34-
# Test update from enabled to enabled
35-
Set-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName -DataMaskingState "Enabled"
36-
$policy = Get-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName
37-
38-
# Assert
39-
Assert-AreEqual $policy.DataMaskingState "Enabled"
40-
41-
42-
# Test update from enabled to disabled
43-
Set-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName -DataMaskingState "Disabled"
44-
$policy = Get-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName
45-
46-
# Assert
47-
Assert-AreEqual $policy.DataMaskingState "Disabled"
48-
49-
# Test update from disabled to disabled
50-
Set-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName -DataMaskingState "Disabled"
51-
$policy = Get-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName
52-
53-
# Assert
54-
Assert-AreEqual $policy.DataMaskingState "Disabled"
55-
56-
# Test update from disabled to enabled
57-
Set-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName -DataMaskingState "Enabled"
58-
$policy = Get-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName
59-
60-
# Assert
61-
Assert-AreEqual $policy.DataMaskingState "Enabled"
62-
}
63-
finally
64-
{
65-
# Cleanup
66-
}
67-
}
68-
6915
<#
7016
.SYNOPSIS
7117
Tests changes of the privileged logins property of a data masking policy
7218
#>
73-
function Test-DatabaseDataMaskingPrivilegedLoginsChanges
19+
function Test-DatabaseDataMaskingPrivilegedUsersChanges
7420
{
7521

7622
# Setup
@@ -79,48 +25,48 @@ function Test-DatabaseDataMaskingPrivilegedLoginsChanges
7925

8026
try
8127
{
82-
# Test create as enabled
83-
Set-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName -DataMaskingState "Enabled"
28+
# Defualt policy should be in disabled state
8429
$policy = Get-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName
8530

8631
# Assert
87-
Assert-AreEqual $policy.DataMaskingState "Enabled"
32+
Assert-AreEqual "Disabled" $policy.DataMaskingState
8833

8934

9035
# Test adding a privileged login
91-
Set-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName -PrivilegedLogins "dbo"
36+
Set-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName -PrivilegedUsers "public" -DataMaskingState "Enabled"
9237
$policy = Get-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName
9338

9439
# Assert
95-
Assert-AreEqual $policy.PrivilegedLogins "dbo"
40+
Assert-AreEqual "public;" $policy.PrivilegedUsers
41+
Assert-AreEqual "Enabled" $policy.DataMaskingState
9642

9743
# Test removing a privileged login while having enabled policy
98-
Set-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName -PrivilegedLogins ""
44+
Set-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName -PrivilegedUsers ""
9945
$policy = Get-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName
10046

10147
# Assert
102-
Assert-AreEqual $policy.PrivilegedLogins ""
48+
Assert-AreEqual "" $policy.PrivilegedUsers
10349

10450
# Test disabling a policy
10551
Set-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName -DataMaskingState "Disabled"
10652
$policy = Get-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName
10753

10854
# Assert
109-
Assert-AreEqual $policy.PrivilegedLogins ""
55+
Assert-AreEqual "" $policy.PrivilegedUsers
11056

11157
# Test adding a privileged login while being disabled
112-
Set-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName -PrivilegedLogins "dbo"
58+
Set-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName -PrivilegedUsers "public"
11359
$policy = Get-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName
11460

11561
# Assert
116-
Assert-AreEqual $policy.PrivilegedLogins "dbo"
62+
Assert-AreEqual "" $policy.PrivilegedUsers
11763

11864
# Test removing a privileged login while being disabled
119-
Set-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName -PrivilegedLogins ""
65+
Set-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName -PrivilegedUsers ""
12066
$policy = Get-AzureRmSqlDatabaseDataMaskingPolicy -ResourceGroupName $params.rgname -ServerName $params.serverName -DatabaseName $params.databaseName
12167

12268
# Assert
123-
Assert-AreEqual $policy.PrivilegedLogins ""
69+
Assert-AreEqual "" $policy.PrivilegedUsers
12470
}
12571
finally
12672
{
@@ -199,7 +145,6 @@ function Test-DatabaseDataMaskingBasicRuleLifecycle
199145
}
200146
}
201147

202-
203148
<#
204149
.SYNOPSIS
205150
Tests the lifecycle of a data masking rule with numerical masking function

src/ResourceManager/Sql/Commands.Sql.Test/ScenarioTests/SqlTestsBase.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,5 +157,18 @@ protected GraphRbacManagementClient GetGraphClient()
157157

158158
return TestBase.GetGraphServiceClient<GraphRbacManagementClient>(testFactory, tenantId);
159159
}
160+
161+
protected Management.Storage.StorageManagementClient GetStorageV2Client()
162+
{
163+
var client =
164+
TestBase.GetServiceClient<Management.Storage.StorageManagementClient>(new CSMTestEnvironmentFactory());
165+
166+
if (HttpMockServer.Mode == HttpRecorderMode.Playback)
167+
{
168+
client.LongRunningOperationInitialTimeout = 0;
169+
client.LongRunningOperationRetryTimeout = 0;
170+
}
171+
return client;
172+
}
160173
}
161174
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
// ----------------------------------------------------------------------------------
2+
//
3+
// Copyright Microsoft Corporation
4+
// Licensed under the Apache License, Version 2.0 (the "License");
5+
// you may not use this file except in compliance with the License.
6+
// You may obtain a copy of the License at
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
// Unless required by applicable law or agreed to in writing, software
9+
// distributed under the License is distributed on an "AS IS" BASIS,
10+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
// See the License for the specific language governing permissions and
12+
// limitations under the License.
13+
// ----------------------------------------------------------------------------------
14+
15+
using Microsoft.Azure.Commands.ScenarioTest.SqlTests;
16+
using Microsoft.WindowsAzure.Commands.ScenarioTest;
17+
using Xunit;
18+
19+
namespace Microsoft.Azure.Commands.Sql.Test.ScenarioTests
20+
{
21+
public class ThreatDetectionTests : SqlTestsBase
22+
{
23+
protected override void SetupManagementClients()
24+
{
25+
var sqlCSMClient = GetSqlClient();
26+
var storageClient = GetStorageClient();
27+
var storageV2Client = GetStorageV2Client();
28+
var resourcesClient = GetResourcesClient();
29+
var authorizationClient = GetAuthorizationManagementClient();
30+
helper.SetupSomeOfManagementClients(sqlCSMClient, storageClient, storageV2Client, resourcesClient,
31+
authorizationClient);
32+
}
33+
34+
[Fact]
35+
[Trait(Category.AcceptanceType, Category.Sql)]
36+
public void ThreatDetectionDatabaseGetDefualtPolicy()
37+
{
38+
RunPowerShellTest("Test-ThreatDetectionDatabaseGetDefualtPolicy");
39+
}
40+
41+
[Fact]
42+
[Trait(Category.AcceptanceType, Category.Sql)]
43+
public void ThreatDetectionDatabaseUpdatePolicy()
44+
{
45+
RunPowerShellTest("Test-ThreatDetectionDatabaseUpdatePolicy");
46+
}
47+
48+
[Fact]
49+
[Trait(Category.AcceptanceType, Category.Sql)]
50+
public void DisablingThreatDetection()
51+
{
52+
RunPowerShellTest("Test-DisablingThreatDetection");
53+
}
54+
55+
[Fact]
56+
[Trait(Category.AcceptanceType, Category.Sql)]
57+
public void InvalidArgumentsThreatDetection()
58+
{
59+
RunPowerShellTest("Test-InvalidArgumentsThreatDetection");
60+
}
61+
62+
[Fact]
63+
[Trait(Category.AcceptanceType, Category.Sql)]
64+
public void ThreatDetectionOnV2Server()
65+
{
66+
RunPowerShellTest("Test-ThreatDetectionOnV2Server");
67+
}
68+
}
69+
}

0 commit comments

Comments
 (0)