sp_adduser : Nouveau schéma !

J’ai récemment croisé un script utilisant la procédure stockée système sp_adduser. L’aide en ligne indique que cette procédure a pour fonctionnalité d’ajouter un nouvel utilisateur à la base courante. Pourtant, elle en fait un peu plus…

Certes, cette procédure stockée est considérée comme obsolète et est appelée à être retirée dans une prochaine version de SQL Server. Toutefois, elle est encore présente dans de nombreuses “boîtes à outils” que les administrateurs de données se sont construites au fil du temps.

Prenons par exemple le script suivant, mélange de “nouvelles” syntaxes et de cette procédure stockée dépréciée.

if not exists (select * from sys.server_principals where name='toto')
	CREATE LOGIN [toto] WITH PASSWORD='toto',CHECK_EXPIRATION = OFF, CHECK_POLICY = OFF
use tempdb
exec sp_adduser 'toto'

Jusqu’ici, en regardant l’aide en ligne, on se dit qu’un nouvel utilisateur ‘toto’ est créé dans la base tempdb, et qu’il est mappé sur la connexion éponyme.

Mais cherchons maintenant à supprimer cet utilisateur que l’on vient de créer, et on s’aperçoit que ce n’est pas si simple.

On s’aperçoit alors que la procédure sp_adduser ne s’est pas seulement contentée de créer un utilisateur, mais qu’elle lui a aussi ajouteé un schéma de même nom. En fait, elle a fait en sorte d’obtenir le même résultat que si elle avait tourné sous SQL Server 2000 et que la base avait ensuite été migré sous une version plus récente.

Au final, elle déstabilise quelque peu… Voilà donc, en plus du fait qu’elle est appelée à disparaitre, une raison de plus pour ne plus utiliser cette procédure stockée et lui préférer la syntaxe CREATE USER  (voir ici).

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Etes-vous un robot ? *Chargement du capcha...

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.