sql_cmd 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +201 -0
  3. data/lib/optional_dependencies.rb +30 -0
  4. data/lib/sql_cmd/agent.rb +32 -0
  5. data/lib/sql_cmd/always_on.rb +267 -0
  6. data/lib/sql_cmd/azure.rb +80 -0
  7. data/lib/sql_cmd/backups.rb +276 -0
  8. data/lib/sql_cmd/config.rb +62 -0
  9. data/lib/sql_cmd/database.rb +618 -0
  10. data/lib/sql_cmd/format.rb +124 -0
  11. data/lib/sql_cmd/query.rb +350 -0
  12. data/lib/sql_cmd/security.rb +21 -0
  13. data/lib/sql_cmd/sql_helper.ps1 +89 -0
  14. data/lib/sql_cmd.rb +44 -0
  15. data/sql_scripts/Agent/CreateSQLJob.sql +81 -0
  16. data/sql_scripts/Agent/JobLastRunInfo.sql +70 -0
  17. data/sql_scripts/Agent/JobRunStatus.sql +21 -0
  18. data/sql_scripts/Agent/SQLAgentStatus.sql +8 -0
  19. data/sql_scripts/AlwaysOn/AddDatabaseToAvailabilityGroupOnSecondary.sql +72 -0
  20. data/sql_scripts/AlwaysOn/AddDatabaseToPrimaryAvailabilityGroup.sql +16 -0
  21. data/sql_scripts/AlwaysOn/AutomaticSeedingProgress.sql +34 -0
  22. data/sql_scripts/AlwaysOn/ConfigurePrimaryForAutomaticSeeding.sql +2 -0
  23. data/sql_scripts/AlwaysOn/ConfigurePrimaryForManualSeeding.sql +2 -0
  24. data/sql_scripts/AlwaysOn/ConfigureSecondaryForAutomaticSeeding.sql +1 -0
  25. data/sql_scripts/AlwaysOn/DropSecondary.sql +58 -0
  26. data/sql_scripts/AlwaysOn/RemoveDatabaseFromGroup.sql +2 -0
  27. data/sql_scripts/AlwaysOn/SynchronizationState.sql +14 -0
  28. data/sql_scripts/Database/BackupDatabase.sql +95 -0
  29. data/sql_scripts/Database/CompressAllTables.sql +100 -0
  30. data/sql_scripts/Database/CreateLogin.sql +16 -0
  31. data/sql_scripts/Database/DropDatabase.sql +51 -0
  32. data/sql_scripts/Database/GetBackupFiles.sql +31 -0
  33. data/sql_scripts/Database/GetBackupHeaders.sql +94 -0
  34. data/sql_scripts/Database/GetFileInfoFromBackup.sql +9 -0
  35. data/sql_scripts/Database/RestoreDatabase.sql +185 -0
  36. data/sql_scripts/Database/SetFullRecovery.sql +19 -0
  37. data/sql_scripts/Database/SetSQLCompatibility.sql +33 -0
  38. data/sql_scripts/Security/AssignDatabaseRoles.sql +44 -0
  39. data/sql_scripts/Security/CreateOrUpdateCredential.sql +11 -0
  40. data/sql_scripts/Security/CreateSqlLogin.sql +20 -0
  41. data/sql_scripts/Security/ExportDatabasePermissions.sql +757 -0
  42. data/sql_scripts/Security/GenerateCreateLoginsScript.sql +144 -0
  43. data/sql_scripts/Security/GenerateValidateLoginsScript.sql +83 -0
  44. data/sql_scripts/Security/GetUserSID.sql +3 -0
  45. data/sql_scripts/Security/UpdateSqlPassword.sql +24 -0
  46. data/sql_scripts/Security/ValidateDatabaseRoles.sql +12 -0
  47. data/sql_scripts/Status/ANSINullsOffTableCount.sql +13 -0
  48. data/sql_scripts/Status/ANSINullsOffTables.sql +9 -0
  49. data/sql_scripts/Status/BackupProgress.sql +17 -0
  50. data/sql_scripts/Status/DatabaseInfo.sql +199 -0
  51. data/sql_scripts/Status/DatabaseSize.sql +26 -0
  52. data/sql_scripts/Status/DiskSpace.sql +14 -0
  53. data/sql_scripts/Status/RestoreProgress.sql +17 -0
  54. data/sql_scripts/Status/SQLSettings.sql +182 -0
  55. data/sql_scripts/Status/UncompressedTableCount.sql +27 -0
  56. metadata +224 -0
@@ -0,0 +1,31 @@
1
+ DECLARE @Depth int
2
+ DECLARE @FileFlag int
3
+ DECLARE @TargetFolder nvarchar(255)
4
+ DECLARE @BackupBaseName nvarchar(255)
5
+ DECLARE @LogOnly bit
6
+ DECLARE @BackupFileExtension nvarchar(3)
7
+
8
+ SET @Depth = 1
9
+ SET @FileFlag = 1
10
+ SET @TargetFolder = '$(targetfolder)'
11
+ SET @BackupBaseName = '$(bkupname)'
12
+ SET @LogOnly = '$(logonly)'
13
+
14
+ SET @BackupFileExtension = CASE WHEN @LogOnly = 1 THEN 'trn' ELSE 'bak' END
15
+
16
+ DECLARE @DirTree TABLE (
17
+ FileName nvarchar(255),
18
+ Depth smallint,
19
+ FileFlag smallint
20
+ )
21
+
22
+ INSERT INTO @DirTree
23
+ EXEC xp_dirtree @TargetFolder, @Depth, @FileFlag
24
+
25
+ SELECT * FROM @DirTree
26
+ WHERE FileFlag = @FileFlag AND (
27
+ [FileName] LIKE @BackupBaseName + '[_][0-9][0-9][0-9][0-9][0-9][0-9].part[0-9]%.' + @BackupFileExtension
28
+ OR [FileName] LIKE @BackupBaseName + '[_][0-9][0-9][0-9][0-9][0-9][0-9].' + @BackupFileExtension
29
+ OR [FileName] LIKE @BackupBaseName + '.part[0-9]%.' + @BackupFileExtension
30
+ OR [FileName] LIKE @BackupBaseName + '.' + @BackupFileExtension
31
+ )
@@ -0,0 +1,94 @@
1
+ SET NOCOUNT ON
2
+
3
+ DECLARE @bkup_files nvarchar(max)
4
+ DECLARE @credential nvarchar(max)
5
+ DECLARE @rowcount int
6
+
7
+ DECLARE @HeaderOnly_cmd nvarchar(max)
8
+ DECLARE @BackupSetPosition int
9
+ DECLARE @Version14Plus bit
10
+ DECLARE @SQLMajorVersion nvarchar(128)
11
+
12
+ SET @bkup_files = '$(bkupfiles)'
13
+ SET @credential = '$(credential)'
14
+
15
+ SET @SQLMajorVersion = CONVERT(NVARCHAR(128), SERVERPROPERTY('ProductVersion'))
16
+ SET @SQLMajorVersion = LEFT(@SQLMajorVersion, CHARINDEX('.', @SQLMajorVersion) - 1)
17
+
18
+ SET @HeaderOnly_cmd =
19
+ 'DECLARE @BackupSets TABLE(
20
+ BackupName nvarchar(128),
21
+ BackupDescription nvarchar(255),
22
+ BackupType smallint,
23
+ ExpirationDate datetime,
24
+ Compressed bit,
25
+ Position smallint,
26
+ DeviceType tinyint,
27
+ UserName nvarchar(128),
28
+ ServerName nvarchar(128),
29
+ DatabaseName nvarchar(128),
30
+ DatabaseVersion int,
31
+ DatabaseCreationDate datetime,
32
+ BackupSize numeric(20,0),
33
+ FirstLSN numeric(25,0),
34
+ LastLSN numeric(25,0),
35
+ CheckpointLSN numeric(25,0),
36
+ DatabaseBackupLSN numeric(25,0),
37
+ BackupStartDate datetime,
38
+ BackupFinishDate datetime,
39
+ SortOrder smallint,
40
+ CodePage smallint,
41
+ UnicodeLocaleId int,
42
+ UnicodeComparisonStyle int,
43
+ CompatibilityLevel tinyint,
44
+ SoftwareVendorId int,
45
+ SoftwareVersionMajor int,
46
+ SoftwareVersionMinor int,
47
+ SoftwareVersionBuild int,
48
+ MachineName nvarchar(128),
49
+ Flags int,
50
+ BindingID uniqueidentifier,
51
+ RecoveryForkID uniqueidentifier,
52
+ Collation nvarchar(128),
53
+ FamilyGUID uniqueidentifier,
54
+ HasBulkLoggedData bit,
55
+ IsSnapshot bit,
56
+ IsReadOnly bit,
57
+ IsSingleUser bit,
58
+ HasBackupChecksums bit,
59
+ IsDamaged bit,
60
+ BeginsLogChain bit,
61
+ HasIncompleteMetaData bit,
62
+ IsForceOffline bit,
63
+ IsCopyOnly bit,
64
+ FirstRecoveryForkID uniqueidentifier,
65
+ ForkPointLSN numeric(25,0),
66
+ RecoveryModel nvarchar(60),
67
+ DifferentialBaseLSN numeric(25,0),
68
+ DifferentialBaseGUID uniqueidentifier,
69
+ BackupTypeDescription nvarchar(60),
70
+ BackupSetGUID uniqueidentifier,
71
+ CompressedBackupSize bit,'
72
+ + CASE WHEN (@SQLMajorVersion >= 11) THEN ' Containment tinyint,' ELSE '' END
73
+ + CASE WHEN (@SQLMajorVersion >= 12) THEN
74
+ 'KeyAlgorithm nvarchar(32),
75
+ EncryptorThumbprint varbinary(20),
76
+ EncryptorType nvarchar(32),' ELSE '' END
77
+ + '--
78
+ -- This field added to retain order by
79
+ --
80
+ Seq int NOT NULL identity(1,1)
81
+ )
82
+
83
+ INSERT INTO @BackupSets
84
+ exec (''
85
+ RESTORE HEADERONLY
86
+ FROM ' + REPLACE(@bkup_files, '''', '''''') + '
87
+ WITH ' + CASE WHEN @credential NOT LIKE '' THEN 'CREDENTIAL = ''''' + @credential + ''''', ' ELSE '' END + '
88
+ NOUNLOAD'')
89
+
90
+ SELECT * FROM @BackupSets
91
+ ORDER BY BackupFinishDate DESC
92
+ '
93
+
94
+ EXEC sp_executesql @HeaderOnly_cmd
@@ -0,0 +1,9 @@
1
+ SET NOCOUNT ON
2
+
3
+ DECLARE @sql nvarchar(max)
4
+ DECLARE @credential nvarchar(max)
5
+
6
+ SET @credential = '$(credential)'
7
+ SET @sql = 'RESTORE FILELISTONLY FROM $(bkupfiles)' + CASE WHEN @credential NOT LIKE '' THEN ' WITH CREDENTIAL = ''' + @credential + '''' ELSE '' END
8
+
9
+ EXEC(@sql)
@@ -0,0 +1,185 @@
1
+ SET NOCOUNT ON
2
+
3
+ DECLARE @db_name nvarchar(max)
4
+ DECLARE @credential nvarchar(max)
5
+ DECLARE @db_state int
6
+ DECLARE @bkup_files nvarchar(max)
7
+ DECLARE @data_file nvarchar(max)
8
+ DECLARE @data_file_logical_name nvarchar(255)
9
+ DECLARE @log_file nvarchar(max)
10
+ DECLARE @log_file_logical_name nvarchar(255)
11
+ DECLARE @database_cmd nvarchar(max)
12
+ DECLARE @setproperties_cmd nvarchar(max)
13
+ DECLARE @prepareolddb_cmd nvarchar(max)
14
+ DECLARE @replcheck_cmd nvarchar(max)
15
+ DECLARE @change_logical_names_cmd nvarchar(max)
16
+ DECLARE @rowcount int
17
+ DECLARE @log_only bit
18
+ DECLARE @recovery bit
19
+ DECLARE @replace bit
20
+ DECLARE @keep_replication bit
21
+ DECLARE @unload bit
22
+ DECLARE @stats nvarchar(3)
23
+
24
+ DECLARE @GetPosition_cmd nvarchar(max)
25
+ DECLARE @BackupSetPosition int
26
+ DECLARE @Version14Plus bit
27
+ DECLARE @SQLMajorVersion nvarchar(128)
28
+
29
+ SET @db_name = '$(databasename)'
30
+ SET @credential = '$(credential)'
31
+ SET @bkup_files = '$(bkupfiles)'
32
+ SET @data_file = '$(datafile)'
33
+ SET @data_file_logical_name = '$(datafilelogicalname)'
34
+ SET @log_file = '$(logfile)'
35
+ SET @log_file_logical_name = '$(logfilelogicalname)'
36
+ SET @log_only = '$(logonly)'
37
+ SET @recovery = '$(recovery)'
38
+ SET @replace = '$(replace)'
39
+ SET @keep_replication = '$(keepreplication)'
40
+ SET @unload = '$(unload)'
41
+ SET @stats = '$(stats)'
42
+
43
+ SET @SQLMajorVersion = CONVERT(NVARCHAR(128), SERVERPROPERTY('ProductVersion'))
44
+ SET @SQLMajorVersion = LEFT(@SQLMajorVersion, CHARINDEX('.', @SQLMajorVersion) - 1)
45
+ SELECT @db_state = [state] FROM sys.databases WHERE [Name] = @db_name
46
+
47
+ SET @GetPosition_cmd =
48
+ 'DECLARE @BackupSets TABLE(
49
+ BackupName nvarchar(128),
50
+ BackupDescription nvarchar(255),
51
+ BackupType smallint,
52
+ ExpirationDate datetime,
53
+ Compressed bit,
54
+ Position smallint,
55
+ DeviceType tinyint,
56
+ UserName nvarchar(128),
57
+ ServerName nvarchar(128),
58
+ DatabaseName nvarchar(128),
59
+ DatabaseVersion int,
60
+ DatabaseCreationDate datetime,
61
+ BackupSize numeric(20,0),
62
+ FirstLSN numeric(25,0),
63
+ LastLSN numeric(25,0),
64
+ CheckpointLSN numeric(25,0),
65
+ DatabaseBackupLSN numeric(25,0),
66
+ BackupStartDate datetime,
67
+ BackupFinishDate datetime,
68
+ SortOrder smallint,
69
+ CodePage smallint,
70
+ UnicodeLocaleId int,
71
+ UnicodeComparisonStyle int,
72
+ CompatibilityLevel tinyint,
73
+ SoftwareVendorId int,
74
+ SoftwareVersionMajor int,
75
+ SoftwareVersionMinor int,
76
+ SoftwareVersionBuild int,
77
+ MachineName nvarchar(128),
78
+ Flags int,
79
+ BindingID uniqueidentifier,
80
+ RecoveryForkID uniqueidentifier,
81
+ Collation nvarchar(128),
82
+ FamilyGUID uniqueidentifier,
83
+ HasBulkLoggedData bit,
84
+ IsSnapshot bit,
85
+ IsReadOnly bit,
86
+ IsSingleUser bit,
87
+ HasBackupChecksums bit,
88
+ IsDamaged bit,
89
+ BeginsLogChain bit,
90
+ HasIncompleteMetaData bit,
91
+ IsForceOffline bit,
92
+ IsCopyOnly bit,
93
+ FirstRecoveryForkID uniqueidentifier,
94
+ ForkPointLSN numeric(25,0),
95
+ RecoveryModel nvarchar(60),
96
+ DifferentialBaseLSN numeric(25,0),
97
+ DifferentialBaseGUID uniqueidentifier,
98
+ BackupTypeDescription nvarchar(60),
99
+ BackupSetGUID uniqueidentifier,
100
+ CompressedBackupSize bit,'
101
+ + CASE WHEN (@SQLMajorVersion >= 11) THEN ' Containment tinyint,' ELSE '' END
102
+ + CASE WHEN (@SQLMajorVersion >= 12) THEN
103
+ 'KeyAlgorithm nvarchar(32),
104
+ EncryptorThumbprint varbinary(20),
105
+ EncryptorType nvarchar(32),' ELSE '' END
106
+ + '--
107
+ -- This field added to retain order by
108
+ --
109
+ Seq int NOT NULL identity(1,1)
110
+ )
111
+
112
+ INSERT INTO @BackupSets
113
+ exec (''
114
+ RESTORE HEADERONLY
115
+ FROM ' + REPLACE(@bkup_files, '''', '''''') + '
116
+ WITH NOUNLOAD' + CASE WHEN @credential NOT LIKE '' THEN ', CREDENTIAL = ''''' + @credential + '''''' ELSE '' END + ''')
117
+
118
+ SELECT TOP(1) @BackupSetPosition = Position FROM @BackupSets
119
+ ORDER BY BackupFinishDate DESC
120
+ '
121
+
122
+ SET @replcheck_cmd =
123
+ N'IF EXISTS (SELECT * FROM [' + @db_name + '].[INFORMATION_SCHEMA].[TABLES]
124
+ WHERE TABLE_NAME = ''syspublications'')
125
+ BEGIN
126
+ SELECT @rowcount=count(*) FROM [' + @db_name + '].[dbo].syspublications
127
+ END
128
+ ELSE
129
+ BEGIN
130
+ SET @rowcount = 0
131
+ END
132
+ '
133
+
134
+ -- Check if replication is enabled. If so, notify user and exit.
135
+ IF EXISTS (SELECT * FROM sys.databases WHERE [Name] = @db_name AND state != 1)
136
+ BEGIN
137
+ EXEC sp_executesql @replcheck_cmd, N'@rowcount int output', @rowcount output;
138
+ IF (@rowcount > 0)
139
+ BEGIN
140
+ PRINT ('Replication is enabled on ' + @db_name + '. Remove replication before proceeding...')
141
+ RETURN
142
+ END
143
+ END
144
+
145
+ SET @prepareolddb_cmd =
146
+ '
147
+ IF EXISTS (SELECT * FROM sys.databases WHERE Name = ''' + @db_name + ''')
148
+ BEGIN
149
+ ALTER DATABASE [' + @db_name + '] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
150
+ ALTER DATABASE [' + @db_name + '] SET MULTI_USER WITH ROLLBACK IMMEDIATE
151
+ END
152
+ '
153
+
154
+ -- Get the position of the most recent backup set.
155
+ EXEC sp_executesql @GetPosition_cmd, N'@BackupSetPosition int output', @BackupSetPosition output;
156
+ IF (@BackupSetPosition < 1)
157
+ BEGIN
158
+ PRINT ('Failed to get backup set position. Using position 1...')
159
+ SET @BackupSetPosition = 1
160
+ END
161
+
162
+ -- Restore database query
163
+ SET @database_cmd = 'RESTORE ' + CASE WHEN @log_only = 1 THEN 'LOG' ELSE 'DATABASE' END + ' [' + @db_name + '] FROM ' + @bkup_files + ' WITH FILE = ' + CONVERT(NVARCHAR(5), @BackupSetPosition) + ', ' +
164
+ CASE WHEN @data_file_logical_name != '' THEN 'MOVE N''' + @data_file_logical_name + ''' TO N''' + @data_file + ''', ' ELSE '' END +
165
+ CASE WHEN @log_file_logical_name != '' THEN 'MOVE N''' + @log_file_logical_name + ''' TO N''' + @log_file + ''', ' ELSE '' END +
166
+ CASE WHEN @replace = 1 THEN 'REPLACE, ' ELSE '' END +
167
+ CASE WHEN @recovery = 1 THEN 'RECOVERY' ELSE 'NORECOVERY' END + ', ' +
168
+ CASE WHEN @keep_replication = 1 THEN 'KEEP_REPLICATION, ' ELSE '' END +
169
+ CASE WHEN @credential NOT LIKE '' THEN 'CREDENTIAL = ''' + @credential + ''', ' ELSE '' END +
170
+ CASE WHEN @unload = 1 THEN 'UNLOAD' ELSE 'NOUNLOAD' END + ', STATS = ' + @stats
171
+
172
+ SET @change_logical_names_cmd = 'ALTER DATABASE [' + @db_name + '] MODIFY FILE ( NAME = ' + @data_file_logical_name + ', NEWNAME = ' + @db_name + '_Data );' +
173
+ 'ALTER DATABASE [' + @db_name + '] MODIFY FILE ( NAME = ' + @log_file_logical_name + ', NEWNAME = ' + @db_name + '_Log );'
174
+
175
+ IF @db_state != 1 -- If it's not restoring
176
+ BEGIN
177
+ EXEC (@prepareolddb_cmd)
178
+ END
179
+
180
+ EXEC (@database_cmd)
181
+
182
+ IF @db_state != 1
183
+ BEGIN
184
+ EXEC (@change_logical_names_cmd)
185
+ END
@@ -0,0 +1,19 @@
1
+ IF (SELECT recovery_model_desc FROM sys.databases WHERE name = '$(databasename)') NOT LIKE 'FULL'
2
+ BEGIN
3
+ PRINT ('Setting recovery to full...')
4
+
5
+ ALTER DATABASE [$(databasename)] SET RECOVERY FULL WITH NO_WAIT
6
+
7
+ DECLARE @currentrecoverymodel nvarchar(50)
8
+ SELECT @currentrecoverymodel = recovery_model_desc FROM sys.databases WHERE name = '$(databasename)'
9
+ IF (@currentrecoverymodel NOT LIKE 'FULL')
10
+ BEGIN
11
+ RAISERROR('Failed to set recovery to full!', 20, 1) WITH LOG
12
+ END
13
+ PRINT ('Recovery model set to ' + @currentrecoverymodel)
14
+ SELECT CAST(1 AS bit) AS RecoveryModelUpdated
15
+ END
16
+ ELSE
17
+ BEGIN
18
+ SELECT CAST(0 AS bit) AS RecoveryModelUpdated
19
+ END
@@ -0,0 +1,33 @@
1
+ SET NOCOUNT ON
2
+
3
+ DECLARE @dbname nvarchar(128)
4
+ DECLARE @alter_db_command nvarchar(255)
5
+ DECLARE @compatibility_level nvarchar(3)
6
+ DECLARE @current_compatibility_level nvarchar(3)
7
+ DECLARE @out_msg nvarchar(max)
8
+
9
+ SET @dbname = '$(databasename)'
10
+ SET @compatibility_level = '$(compatibility_level)'
11
+ SET @alter_db_command = 'ALTER DATABASE [' + @dbname + '] SET COMPATIBILITY_LEVEL = ' + @compatibility_level
12
+
13
+ SELECT @current_compatibility_level = compatibility_level FROM sys.databases WHERE name = @dbname
14
+
15
+ IF @current_compatibility_level < @compatibility_level
16
+ BEGIN
17
+ SET @out_msg = 'Updating compatibility level from ' + @current_compatibility_level + ' to ' + @compatibility_level + '.'
18
+ PRINT @out_msg
19
+ exec sp_executesql @alter_db_command
20
+ END
21
+ ELSE IF @current_compatibility_level = @compatibility_level
22
+ BEGIN
23
+ SET @out_msg = 'Compatibility level already set to ' + @current_compatibility_level + '. No change made.'
24
+ PRINT @out_msg
25
+ END
26
+ ELSE
27
+ BEGIN
28
+ SET @out_msg = 'WARNING! Current compatibility level (' + @current_compatibility_level + ') is higher than ' + @compatibility_level + '! Downgrading compatibility level!'
29
+ PRINT @out_msg
30
+ exec sp_executesql @alter_db_command
31
+ END
32
+
33
+ SELECT compatibility_level FROM sys.databases WHERE name = @dbname
@@ -0,0 +1,44 @@
1
+ USE [$(databasename)]
2
+
3
+ DECLARE @login_name nvarchar(max)
4
+ DECLARE @db_name nvarchar(max)
5
+ DECLARE @user_cmd nvarchar(max)
6
+ DECLARE @roles nvarchar(max)
7
+ DECLARE @roles_cmd nvarchar(max)
8
+ DECLARE @database_roles TABLE (
9
+ DatabaseRole nvarchar(max)
10
+ )
11
+
12
+ SET @login_name = '$(user)'
13
+ SET @db_name = '$(databasename)'
14
+ SET @roles = '$(databaseroles)' -- comma separated list - do not use commas in the values
15
+
16
+ SET @roles_cmd = '
17
+ DECLARE @database_roles TABLE ( DatabaseRole nvarchar(max) )
18
+ INSERT INTO @database_roles ( DatabaseRole )
19
+ VALUES ( ' + '''' + REPLACE(@roles, ',', '''), (''') + ''')
20
+ SELECT RTRIM(LTRIM(DatabaseRole)) FROM @database_roles'
21
+ INSERT INTO @database_roles
22
+ exec sp_executesql @roles_cmd
23
+
24
+ -- Add user and assign security query
25
+ SET @user_cmd =
26
+ '
27
+ USE [' + @db_name + ']
28
+ IF EXISTS (SELECT * FROM sys.schemas WHERE name = N''' + @login_name + ''')
29
+ BEGIN
30
+ DROP SCHEMA [' + @login_name + ']
31
+ END
32
+
33
+ IF EXISTS (SELECT * FROM sys.database_principals WHERE name=N''' + @login_name + ''')
34
+ BEGIN
35
+ DROP USER [' + @login_name + ']
36
+ END
37
+
38
+ CREATE USER [' + @login_name + '] FOR LOGIN [' + @login_name + '];'
39
+
40
+ SELECT @user_cmd += 'EXEC sp_addrolemember N''' + DatabaseRole + ''', N''' + @login_name + ''';' FROM @database_roles
41
+
42
+ EXEC (@user_cmd)
43
+
44
+ SELECT * FROM sys.database_principals WHERE name=@login_name
@@ -0,0 +1,11 @@
1
+ IF EXISTS (SELECT * FROM sys.credentials
2
+ WHERE name = '$(credential_name)')
3
+ BEGIN
4
+ ALTER CREDENTIAL [$(credential_name)] WITH IDENTITY = '$(identity)', SECRET = '$(secret)';
5
+ SELECT 'Credential [$(credential_name)] updated.'
6
+ END
7
+ ELSE
8
+ BEGIN
9
+ CREATE CREDENTIAL [$(credential_name)] WITH IDENTITY = '$(identity)', SECRET = '$(secret)';
10
+ SELECT 'Credential [$(credential_name)] created.'
11
+ END
@@ -0,0 +1,20 @@
1
+ DECLARE @login_name nvarchar(max)
2
+ DECLARE @password nvarchar(max)
3
+ DECLARE @user_cmd nvarchar(max)
4
+
5
+ SET @login_name = '$(user)'
6
+ SET @password = '$(password)'
7
+
8
+ -- Create login
9
+ SET @user_cmd =
10
+ 'USE [master]
11
+ IF EXISTS (SELECT name FROM master.dbo.syslogins WHERE name=''' + @login_name + ''')
12
+ BEGIN
13
+ DROP LOGIN [' + @login_name + ']
14
+ END
15
+
16
+ CREATE LOGIN [' + @login_name + '] WITH PASSWORD=N''' + @password + ''', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF'
17
+
18
+ EXEC (@user_cmd)
19
+
20
+ SELECT name, CONVERT(NVARCHAR(max), sid, 1) FROM master.dbo.syslogins WHERE name=@login_name