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

发布于 2024-09-15 10:12:01 字数 1368 浏览 1 评论 0原文

1) 如果已经有登录名“user1”,则我通过调用 CreateDatabaseUser 函数为数据库“db1”创建用户“user1”

2) 否则,我使用密码“password1”创建登录名“user1” ' 使用 CreateServerLogin 默认数据库为 'db1' (仅在创建 db1 之后),然后使用 CreateDatabaseUser 为 'db1' 创建用户 'user1'

方法 (2) 抛出一个异常于 newUser.Create();CreateDatabaseUser

说,Microsoft.SqlServer.Management.Smo.FailedOperationException:为用户“user1”创建失败。 ---> Microsoft.SqlServer.Management.Common.ExecutionFailureException:执行 Transact-SQL 语句或批处理时发生异常。 ---> System.Data.SqlClient.SqlException:“[user1]”不是有效的登录名或您没有权限。

可能是什么问题?



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) If there is already a login 'user1' then I create a user 'user1' for database 'db1' by calling CreateDatabaseUser function

2) Else, I create a login 'user1' with password 'password1' with default database as 'db1' (only after creating db1) using CreateServerLogin and then I create user 'user1' for 'db1' using CreateDatabaseUser

Method (2) throws an exception at
newUser.Create(); in CreateDatabaseUser

saying, 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.

What could be the problem?



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;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

海的爱人是光 2024-09-22 10:12:01

检查交易和批次。

DDL 语句还支持事务,因此当您创建新用户并通过服务器登录时,服务器上可能不会出现此类登录,因为之前的语句未提交。

另外,批量关闭语句“GO”会有所帮助


首先尝试:

  • CreateServerLogin

  • issue GO

  • CreateDBLogin

  • issue COMMIT


尝试以下逻辑:

  • CreateServerLogin

  • issue COMMIT

  • CreateDBLogin

check up transactions and batches.

DDL statements also support transactions, so when you create new user and pass server login, there might not be such login on the server because previous statement being not committed.

Also batch close statement "GO" would help


Try first:

  • CreateServerLogin

  • issue GO

  • CreateDBLogin

  • issue COMMIT


if failed try this logic:

  • CreateServerLogin

  • issue COMMIT

  • CreateDBLogin

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文