Проблема при создании пользователя в SqlServer с использованием Smo - PullRequest
4 голосов
/ 19 августа 2010

1) Если уже есть логин user1, я создаю пользователя user1 для базы данных db1, вызывая CreateDatabaseUser function

2) Иначе, я создаю логин 'user1' с паролем 'password1' с базой данных по умолчанию как 'db1' (только после создания db1), используя CreateServerLogin , а затем создаю пользователя 'user1' для 'db1', используя CreateDatabaseUser

Метод (2) создает исключение в newUser.Create(); в CreateDatabaseUser

говоря: Microsoft.SqlServer.Management.Smo.FailedOperationException: Create failed for User 'user1'. ---> Microsoft.SqlServer.Management.Common.ExecutionFailureException: An exception occurred while executing a Transact-SQL statement or batch. --- > System.Data.SqlClient.SqlException: '[user1]' is not a valid login or you do not have permission.

В чем может быть проблема?



private static Login CreateServerLogin(Server server, string database, string login, string password)
{
    var newLogin = new Login(server, login)
                       {
                           LoginType = LoginType.SqlLogin,
                           DefaultDatabase = database,
                           PasswordPolicyEnforced = false
                       };

    newLogin.Create(password);

    return newLogin;
}

private static User CreateDatabaseUser(Database database, string user, string login)
{            
    var newUser = new User(database, user) { UserType = UserType.SqlLogin, Login = login };

    newUser.Create();
    newUser.AddToRole("db_owner");
    return newUser;
}

1 Ответ

0 голосов
/ 04 октября 2010

проверка транзакций и пакетов.

Операторы DDL также поддерживают транзакции, поэтому, когда вы создаете нового пользователя и проходите регистрацию на сервере, такой регистрации может не быть на сервере, поскольку предыдущая инструкция не была принята.

Также поможет оператор закрытия партии "GO"


Попробуйте сначала:

  • CreateServerLogin

  • проблема GO

  • CreateDBLogin

  • проблема COMMIT


в случае неудачи попробуйте следующую логику:

  • CreateServerLogin

  • выпуск COMMIT

  • CreateDBLogin

...