在不使用SMO的情况下将登录名和用户添加到SQL Server

时间:2010-09-06 13:12:01

标签: sql sql-server sql-server-2005 sql-server-2008 smo

在我们公司的产品中,我们将数据库附加到SQL Server,我们需要将凭据添加到某些帐户到目录。

目前我们正在使用SMO来实现这一目标,但这给我们带来了问题(x86 vs x64,SQL Server 2005 vs 2008等)

无论如何使用SQL添加登录(到服务器)和用户(到目录)?

这是添加登录的当前代码:

connection = new ServerConnection(new SqlConnection(this.connectionString));
Server server = new Server(connection);

//Drop existing login (if exist)
Login login = server.Logins[AccountName];
if (login != null)
    login.Drop();

//Create new login
login = new Login(server, AccountName);
login.LoginType = LoginType.WindowsUser;

login.Create();
DatabaseMapping mapping = new DatabaseMapping(login.Name, connection.DatabaseName, login.Name);

并添加用户:

connection = new ServerConnection(new SqlConnection(this.connectionString));
Server server = new Server(connection);
Microsoft.SqlServer.Management.Smo.Database database = server.Databases[CatalogName];
User user = server.Databases[CatalogName].Users[LoginName];
if (user != null)
    user.Drop();

user = new User(database, LoginName);
user.Login = LoginName;
user.Create();
user.AddToRole("db_owner");

我想使用SQL执行这些操作。有什么想法吗?

1 个答案:

答案 0 :(得分:5)

CREATE LOGINCREATE USER

测试login first

IF SUSER_ID('Login') IS NULL

测试user first

IF DATABASE_PRINCIPAL_ID('User') IS NULL

添加user to role

EXEC sp_addrolemember 'Role', 'User'

仅供参考,SMO复制SQL功能。我不认为只有SMO可以做任何事情(当然有很多只有SQL的东西)。