使用smo在SqlServer中创建用户的问题
1)如果已经有登录’user1’,那么我通过调用CreateDatabaseUser
函数为数据库’db1’创建用户’user1′
2)否则,我使用CreateServerLogin
创建一个密码为“password1”的登录名“user1”,默认数据库为“db1”(仅在创建db1之后),然后使用CreateDatabaseUser
为“db1”创建用户“user1”
方法(2)在newUser.Create();
抛出exceptionnewUser.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.
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; }
检查交易和批次。
DDL语句也支持事务,因此当您创建新用户并传递服务器登录时,服务器上可能没有此类登录,因为之前的语句未提交。
批量关闭声明“GO”也会有所帮助
首先尝试:
-
CreateServerLogin
-
问题GO
-
CreateDBLogin
-
发出COMMIT
如果失败尝试这个逻辑:
-
CreateServerLogin
-
发出COMMIT
-
CreateDBLogin