2010-09-06 2 views
2

dans le produit de notre société, nous attachons une base de données à SQL Server et nous devons ajouter des informations d'identification à certains comptes au catalogue.Ajoutez le nom de connexion et l'utilisateur à SQL Server sans utiliser SMO

Actuellement nous utilisons SMO pour le faire, mais cela nous donne des problèmes (x86 vs x64, SQL Server 2005 vs 2008, etc.)

Est-ce qu'il y a de toute façon d'ajouter un login (au serveur) et utilisateur (au catalogue) en utilisant SQL?

Ceci est le code actuel pour ajouter connexion:

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

et d'ajouter l'utilisateur:

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"); 

Je veux effectuer ces opérations en utilisant SQL. Des idées?

+1

FYI, si vous pouvez faire quelque chose dans Smo mais pas SQL, vous pouvez toujours utiliser Profiler pour tracer le SQL envoyé au serveur pendant que vous exécutez votre code Smo. C'est généralement suffisant pour vous orienter dans la bonne direction. – Pondlife

+0

Wow, merci. Je ne savais pas à ce sujet ... +1 pour les bons conseils – Nissim

Répondre

4

CREATE LOGIN et CREATE USER

Pour tester un login first:

IF SUSER_ID('Login') IS NULL 

Pour tester un user first

IF DATABASE_PRINCIPAL_ID('User') IS NULL 

Pour ajouter user to role:

EXEC sp_addrolemember 'Role', 'User' 

FYI, SMO réplique la fonctionnalité SQL. Je ne pense pas qu'il y ait quelque chose qui puisse être fait seulement SMO (il y a beaucoup de choses SQL bien sûr).

Questions connexes