{"id":591,"date":"2012-07-11T23:44:03","date_gmt":"2012-07-11T21:44:03","guid":{"rendered":"http:\/\/www.sqlserver.fr\/blog\/?p=591"},"modified":"2026-05-02T14:31:09","modified_gmt":"2026-05-02T12:31:09","slug":"sp_adduser-nouveau-schema","status":"publish","type":"post","link":"https:\/\/www.sqlserver.fr\/blog\/sp_adduser-nouveau-schema\/","title":{"rendered":"sp_adduser : Nouveau sch\u00e9ma !"},"content":{"rendered":"<p>J&rsquo;ai r\u00e9cemment crois\u00e9 un script utilisant la proc\u00e9dure stock\u00e9e syst\u00e8me sp_adduser. L&rsquo;aide en ligne indique que cette proc\u00e9dure a pour fonctionnalit\u00e9 d&rsquo;ajouter un nouvel utilisateur \u00e0 la base courante. Pourtant, elle en fait un peu plus&#8230;<!--more--><\/p>\n<p>Certes, cette proc\u00e9dure stock\u00e9e est consid\u00e9r\u00e9e comme obsol\u00e8te et est appel\u00e9e \u00e0 \u00eatre retir\u00e9e dans une prochaine version de SQL Server. Toutefois, elle est encore pr\u00e9sente dans de nombreuses \u00ab\u00a0bo\u00eetes \u00e0 outils\u00a0\u00bb que les administrateurs de donn\u00e9es se sont construites au fil du temps.<\/p>\n<p>Prenons par exemple le script suivant, m\u00e9lange de \u00ab\u00a0nouvelles\u00a0\u00bb syntaxes et de cette proc\u00e9dure stock\u00e9e d\u00e9pr\u00e9ci\u00e9e.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\">if not exists (select * from sys.server_principals where name='toto')\r\n\tCREATE LOGIN [toto] WITH PASSWORD='toto',CHECK_EXPIRATION = OFF, CHECK_POLICY = OFF\r\nuse tempdb\r\nexec sp_adduser 'toto'<\/pre>\n<p>Jusqu&rsquo;ici, en regardant l&rsquo;aide en ligne, on se dit qu&rsquo;un nouvel utilisateur &lsquo;toto&rsquo; est cr\u00e9\u00e9 dans la base tempdb, et qu&rsquo;il est mapp\u00e9 sur la connexion \u00e9ponyme.<\/p>\n<p>Mais cherchons maintenant \u00e0 supprimer cet utilisateur que l&rsquo;on vient de cr\u00e9er, et on s&rsquo;aper\u00e7oit que ce n&rsquo;est pas si simple.<\/p>\n<p><a href=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2012\/07\/DROP_USER.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-593\" title=\"DROP_USER\" src=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2012\/07\/DROP_USER.png\" alt=\"\" width=\"553\" height=\"89\" srcset=\"https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2012\/07\/DROP_USER.png 553w, https:\/\/www.sqlserver.fr\/blog\/wp-content\/uploads\/2012\/07\/DROP_USER-300x48.png 300w\" sizes=\"auto, (max-width: 553px) 100vw, 553px\" \/><\/a>On s&rsquo;aper\u00e7oit alors que la proc\u00e9dure sp_adduser ne s&rsquo;est pas seulement content\u00e9e de cr\u00e9er un utilisateur, mais qu&rsquo;elle lui a aussi ajoute\u00e9 un sch\u00e9ma de m\u00eame nom. En fait, elle a fait en sorte d&rsquo;obtenir le m\u00eame r\u00e9sultat que si elle avait tourn\u00e9 sous SQL Server 2000 et que la base avait ensuite \u00e9t\u00e9 migr\u00e9 sous une version plus r\u00e9cente.<\/p>\n<p>Au final, elle d\u00e9stabilise quelque peu&#8230; Voil\u00e0 donc, en plus du fait qu&rsquo;elle est appel\u00e9e \u00e0 disparaitre, une raison de plus\u00a0pour ne plus utiliser cette proc\u00e9dure stock\u00e9e et lui pr\u00e9f\u00e9rer la syntaxe CREATE USER\u00a0 (voir <a title=\"CREATE USER\" href=\"https:\/\/docs.microsoft.com\/fr-fr\/sql\/t-sql\/statements\/create-user-transact-sql\" target=\"_blank\" rel=\"noopener noreferrer\">ici<\/a>).<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;ai r\u00e9cemment crois\u00e9 un script utilisant la proc\u00e9dure stock\u00e9e syst\u00e8me sp_adduser. L&rsquo;aide en ligne indique que cette proc\u00e9dure a pour fonctionnalit\u00e9 d&rsquo;ajouter un nouvel utilisateur \u00e0 la base courante. Pourtant, elle en fait un peu plus&#8230;<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-591","post","type-post","status-publish","format-standard","hentry","category-article_sql"],"_links":{"self":[{"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/posts\/591","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/comments?post=591"}],"version-history":[{"count":6,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/posts\/591\/revisions"}],"predecessor-version":[{"id":1949,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/posts\/591\/revisions\/1949"}],"wp:attachment":[{"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/media?parent=591"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/categories?post=591"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlserver.fr\/blog\/wp-json\/wp\/v2\/tags?post=591"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}