2010-11-05 5 views
0

J'ai créé un script post-déploiement pour un projet de base de données dans VS, dans lequel j'accorde un accès utilisateur "UtilisateurX" à un compte Windows. Ce script de post-déploiement est utilisé par plusieurs développeurs qui doivent avoir cet accès "UserX" accordé sur leurs propres machines qcnb01, qcnb03, qcnb04, etc. (avec des instances sql autonomes). Est-il possible de substituer [qcnb02 \ UserX] avec un espace réservé, c'est-à-dire [qcnb ?? \ UserX], puis d'insérer le nom de la machine en conséquence?Un "Créer un utilisateur pour la connexion" - Plusieurs machines autonomes

Voici ma création de déclaration d'utilisateur.

SINON EXISTE (SELECT * FROM sys.database_principals OÙ name = N'qcnb02 \ UserX ') CREATE USER [UserX] LOGIN [qcnb02 \ UserX] AVEC DEFAULT_SCHEMA = [dbo] GO

Let Je précise que "UserX" est la partie statique et que le script de post-déploiement recherche et insère le nom de la machine (qcnb ??) dans le script de post-déploiement (ie [qcnb25 \ UserX]) pendant le temps de construction \ deploy . Est-ce possible?

Merci d'avance pour votre aide.

JDA

Répondre

0

Essayez cette

DECLARE @MachineName VARCHAR(100) 
SELECT @MachineName = Host_Name() 
DECLARE @SQL VARCHAR(1000) 
IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N''[email protected]+'\UserX') 
BEGIN 

    SET @SQL = 'CREATE USER [UserX] FOR LOGIN ['+ @MachineName+'\USERX] WITH DEFAULT_SCHEMA=[dbo]' 
    EXECUTE @SQL 
END 
+0

Lorsque vous exécutez ce «tel quel ... je reçois Msg 15401, niveau 16, état 1, ligne 5 utilisateur Windows NT ou groupe ' @MachineName \ UserX 'introuvable. Vérifiez le nom à nouveau. – JDA

+0

Y at-il quelque chose qui me manque? – JDA

+0

J'ai modifié le code. – JoR

0
DECLARE @MachineName VARCHAR(100) 
SET  @MachineName = Host_Name() 
DECLARE @SQL VARCHAR(1000) 

--IF NOT EXISTS (SELECT name FROM sys.syslogins WHERE name = N''[email protected]+'\machine') 

BEGIN 
    SET @SQL = 'CREATE USER [machine] FOR LOGIN ['[email protected]+'\machine] WITH DEFAULT_SCHEMA=[dbo]' 
    EXECUTE (@SQL) 
END 
Questions connexes