protected private virtual SmoLogin CreateLogin(string login, LoginType type, string defaultDb, SecureString pass = null, bool?passExpEnabled = null, bool?passPolicyEnabled = null) { var sqlLogin = new Login(_server, login) { DefaultDatabase = defaultDb, Language = this.Language, LoginType = type }; if (passExpEnabled.HasValue) { sqlLogin.PasswordExpirationEnabled = passExpEnabled.Value; } if (passPolicyEnabled.HasValue) { sqlLogin.PasswordPolicyEnforced = passPolicyEnabled.Value; } if (base.ShouldProcess(_server.Name, "New login for user/group \"" + sqlLogin.Name + "\"")) { if (pass == null) { sqlLogin.Create(); } else { sqlLogin.Create(pass, LoginCreateOptions.None); } sqlLogin.Refresh(); if (this.Disable.ToBool()) { sqlLogin.Disable(); sqlLogin.Alter(); } _server.Refresh(); return(sqlLogin); } else { return(null); } }
protected override void DoWork(object state) { var mainCancellationTokenSource = new CancellationToken(); try { var tasks = new List <Task>(); var deploymentJobs = _deploymentJobService.Get(p => p.Server.Code == ServerId && p.JobType == (int)JobType.Database && (p.IsCopySourceDone ?? false) && (p.IsStart ?? false) && !(p.IsDone ?? false)) .OrderBy(p => p.FailCount) .Take(2).ToList(); var listJobUpdated = new List <DeploymentJob>(); foreach (var job in deploymentJobs) { var localJob = job; var t = Task.Factory.StartNew(() => { var dbName = localJob.Configuration.DatabaseName; var loginName = localJob.Configuration.DatabaseUsername; var loginPassword = EncryptHelper.Decrypt(localJob.Configuration.DatabasePassword); var pass = PasswordHelper.HashString("123456", "camino"); var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MainDb"].ConnectionString); var file = new FileInfo(localJob.Configuration.SqlScriptPath); var script = file.OpenText().ReadToEnd(); script = script.Replace("{{DATABASE_NAME}}", dbName) .Replace("{{FRANCHISEE_ADMIN_NAME}}", "camino") .Replace("{{FRANCHISEE_ADMIN_PASSWORD}}", pass) .Replace("{{FRANCHISEE_ADMIN_EMAIL}}", "*****@*****.**"); var server = new Server(new ServerConnection(conn)); try { server.ConnectionContext.ExecuteNonQuery(script); using (var scope = new TransactionScope()) { var db = server.Databases[dbName]; var login = server.Logins[loginName]; if (login == null) { // Creating Logins login = new Login(server, loginName) { LoginType = LoginType.SqlLogin, PasswordPolicyEnforced = false }; login.Create(loginPassword); login.DefaultDatabase = dbName; login.Alter(); } // Creating Users in the database for the logins created if (db.Users[loginName] != null) { return; } var dbUser = new User(db, loginName) { UserType = UserType.SqlLogin, Login = login.Name, }; dbUser.Create(); dbUser.AddToRole("db_owner"); localJob.IsDone = true; scope.Complete(); } } catch (Exception exception) { server = new Server(new ServerConnection(conn)); server.KillAllProcesses(dbName); server.KillDatabase(dbName); var db = server.Databases[dbName]; db.Drop(); localJob.IsDone = false; localJob.FailCount = (localJob.FailCount ?? 0) + 1; _diagnosticService.Error(exception); } listJobUpdated.Add(localJob); }, mainCancellationTokenSource); tasks.Add(t); } Task.WaitAll(tasks.ToArray(), mainCancellationTokenSource); _deploymentJobService.UpdateListJobs(listJobUpdated); } catch (Exception ex) { _diagnosticService.Error(ex); } }
public void CreateLogin(string name, string password, string defaultDatabase, string[] roles) { Login login = new Login(_server, name) { LoginType = LoginType.SqlLogin, DefaultDatabase = defaultDatabase, PasswordExpirationEnabled = false, PasswordPolicyEnforced = false }; login.Create(password, LoginCreateOptions.None); for (int i = 0; i < roles.Length; i++) login.AddToRole(roles[i]); login.Alter(); login.Enable(); login.Alter(); }