2010-09-06 2 views
2

в продукте нашей компании, мы присоединяем базу данных к SQL Server, и нам нужно добавить учетные данные для некоторых учетных записей в каталог.Добавьте логин и пользователя на SQL Server без использования SMO

В настоящее время мы используем SMO, чтобы сделать это, но это дает нам проблемы (x86 против 64, SQL Server 2005 по сравнению 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

FYI, если вы можете что-то сделать в Smo, но не в SQL, вы всегда можете использовать Profiler для отслеживания SQL, отправленного на сервер при запуске вашего кода Smo. Обычно этого достаточно, чтобы указать вам в правильном направлении. – Pondlife

+0

Ничего себе, спасибо. Никогда не знал об этом ... +1 за отличный совет – Nissim

ответ

4

CREATE LOGIN и CREATE 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' 

FYI, SMO реплицирует функциональность SQL. Я не думаю, что есть что-то, что можно сделать только с SMO (есть, конечно, много всего SQL).

Смежные вопросы