Inpersonate: SMO 连接SQL SERVER
SMO的SERVER对象能够表示一个SQL SERVER的实例,它可以直接连接相对应的实例并取出需要DB/LOGINS等其它对象.
使用SMO的一个好处就是它可以随时取得SQL实例中的任意对象
new Server(new ServerConnection(new SqlConnection(constr)))
使用SMO的SEVER与DATABASE对象可以执行SQL SCRIPT,对于普通C#代码(SQLCLIENT)在执行SQL SCRIPT的时候,不能执行带有GO的语句.而SMO的对象自带的执行方法则可以很方便的执行大段的SQL SCRIPT
最近在使用SMO对象的时候,有一个inpersonate的需要,我们可以使用SERVRE对象自带的方法来很方便的完成这个操作,但是如果inpersonate选择的WINDOWS验证,用户名不能带域名
在使用domain\username这样的用户的时候经带出现错误: Username or password is incorrect.
Inpersonate
以下代码实现用WINDOWS验证,当ConnectAsUser对象被设置为True的时候,LoginSecure/Login/Password属于将被忽略:
public static Server InpersonateWithSMO(User user, string instancename) { Server srv = new Server(); try { srv.ConnectionContext.LoginSecure = true; srv.ConnectionContext.ConnectAsUser = true; srv.ConnectionContext.ConnectAsUserName = user.alias.Remove(0, user.alias.LastIndexOf('\\') + 1); srv.ConnectionContext.ConnectAsUserPassword = User.pwd; srv.ConnectionContext.ServerInstance = instancename; srv.Initialize(); } catch (Exception ex) { throw ex; } return srv; }
以下代码实现用SQL SERVER验证
public void InpersonateWithSQL() { Server srv = new Server(); srv.ConnectionContext.LoginSecure = false; srv.ConnectionContext.Login = sqlServerLogin; srv.ConnectionContext.Password = password; srv.Initialize(); }