代码之家  ›  专栏  ›  技术社区  ›  Rahul

使用smo在SqlServer中创建用户时出现问题

  •  4
  • Rahul  · 技术社区  · 14 年前

    1) 如果已经有一个登录名“user1”,那么我通过调用 CreateDatabaseUser 作用

    2) 否则,我将创建一个登录名“user1”,密码为“password1”,默认数据库为“db1”(仅在创建db1之后),使用 CreateServerLogin 然后我使用 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 回复  |  直到 14 年前
        1
  •  0
  •   skaeff    14 年前

    检查事务和批次。

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

    此外,batch close语句“GO”也会有所帮助


    首先尝试:

    • CreateServerLogin

    • 发布GO

    • 创建数据库登录

    • 问题提交


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

    • CreateServerLogin

    • 问题提交

    • 创建数据库登录