Source/NuGetGallery.Operations/Tasks/Database/DeleteSqlUserTask.cs (67 lines of code) (raw):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NuGetGallery.Operations.Common;
namespace NuGetGallery.Operations.Tasks.Database
{
[Command("deletesqluser", "Lists SQL Users and access", AltName = "dsu")]
public class DeleteSqlUser : DatabaseTask
{
[Option("Semicolon-separated list of users to delete", AltName="u")]
public List<string> Users { get; set; }
public DeleteSqlUser()
{
Users = new List<string>();
}
public override void ValidateArguments()
{
base.ValidateArguments();
if (!Users.Any())
{
Users = null; // Just trigger ArgCheck to fail
}
ArgCheck.Required(Users, "Users");
}
public override void ExecuteCommand()
{
WithConnection((c, db) =>
{
foreach (var user in Users)
{
if (db.Query<string>("SELECT name FROM sys.database_principals WHERE name = @n", new { n = user }).Any())
{
if (!WhatIf)
{
db.Execute(String.Format("DROP USER [{0}]", user));
}
Log.Info("Deleted Database User: {0}", user);
}
else
{
Log.Info("No DB User found: {0}", user);
}
}
});
WithMasterConnection((c, db) =>
{
foreach (var user in Users)
{
if (db.Query<string>("SELECT name FROM sys.sql_logins WHERE name = @n", new { n = user }).Any())
{
if (!WhatIf)
{
db.Execute(String.Format("DROP LOGIN [{0}]", user));
}
Log.Info("Deleted SQL Login: {0}", user);
}
else
{
Log.Info("No SQL Login found: {0}", user);
}
}
});
}
}
}