Я разрабатываю приложение, которое должно создать на сервере базы данных новый логин и нового пользователя как владельца этого нового. Это для автоматизации развертывания веб-приложения.
это мой метод:
public void CreateDatabase(string connectionString, string newDbName, string newDbUserName, string newDbUserPassword)
{
var connection = new SqlConnectionStringBuilder(connectionString);
Server server = !string.IsNullOrEmpty(connection.UserID)
? new Server(new ServerConnection(connection.DataSource, connection.UserID, connection.Password))
: new Server(new ServerConnection(connection.DataSource));
Login login = null;
User user = null;
Database db = null;
db = new Database(server, newDbName);
db.Create();
login = new Login(server, newDbUserName) { LoginType = LoginType.SqlLogin };
login.Create(newDbUserPassword, LoginCreateOptions.None);
user = new User(db, newDbUserName)
{
UserType = UserType.NoLogin,
Login = login.Name, DefaultSchema = "dbo"
};
user.Create(newDbUserPassword);
dbUser.AddToRole("dbcreator");
}
В имени пользователя генерируется строка без цифр и специальных символов. Пароль генерируется в виде 30-символьной строки со специальными символами и номером.
Проблема в том, что в моем локальном хосте даже на сервере этот код выдает мне следующее исключение:
A password cannot be provided because the user is not authenticated in the database.
Цель состоит в том, чтобы новый пользователь имел доступ только к этой новой базе данных
Есть какие-нибудь идеи, почему и что я делаю не так?