使用smo在SqlServer中创建用户的问题

时间:2010-08-19 09:54:16

标签: c# sql-server smo

1)如果已经登录'user1',那么我通过调用 CreateDatabaseUser 函数

为数据库'db1'创建用户'user1'

2)否则,我使用 CreateServerLogin 创建一个密码为“password1”的登录名“user1”,默认数据库为“db1”(仅在创建db1之后),然后为“db1”创建用户“user1”使用 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 :(得分:0)

检查交易和批次。

DDL语句也支持事务,因此当您创建新用户并传递服务器登录时,服务器上可能没有此类登录,因为之前的语句未提交。

批量关闭声明“GO”也有帮助


先尝试:

  • CreateServerLogin

  • 问题GO

  • CreateDBLogin

  • 问题COMMIT


如果失败,请尝试以下逻辑:

  • CreateServerLogin

  • 问题COMMIT

  • CreateDBLogin