<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Balmukund : Script</title><link>http://blogs.msdn.com/blakhani/archive/tags/Script/default.aspx</link><description>Tags: Script</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Script : Map All Orphan Users to Logins else create login and map</title><link>http://blogs.msdn.com/blakhani/archive/2008/02/25/script-map-all-orphan-users-to-logins-else-create-login-and-map.aspx</link><pubDate>Mon, 25 Feb 2008 08:52:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7888865</guid><dc:creator>blakhani</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/blakhani/comments/7888865.aspx</comments><wfw:commentRss>http://blogs.msdn.com/blakhani/commentrss.aspx?PostID=7888865</wfw:commentRss><description>&lt;p&gt;Once of my customer asked for an "automated" script which would find all the users, which are not mapped to login and map them. Below is the logic which can be used.&lt;/p&gt; &lt;p&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; PLEASE READ DISCLAIMER &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;/p&gt; &lt;p&gt;If (login not exists)&lt;br&gt;create login and map login with user&lt;br&gt;else&lt;br&gt;map login with user  &lt;p&gt;&amp;lt;Replace MYDB and Password as appropriate&amp;gt;&lt;/p&gt; &lt;p&gt;Idea taken from &lt;a title="http://support.microsoft.com/kb/274188" href="http://support.microsoft.com/kb/274188"&gt;http://support.microsoft.com/kb/274188&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Below is the script for above Logic&lt;/p&gt; &lt;p&gt;USE MYDB&lt;br&gt;GO&lt;br&gt;SET NOCOUNT ON&lt;br&gt;-- Declare Variables&lt;br&gt;DECLARE&amp;nbsp; @user_name&amp;nbsp; NVARCHAR(128),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @login_name NVARCHAR(128),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @err_msg&amp;nbsp;&amp;nbsp;&amp;nbsp; VARCHAR(80),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @str&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VARCHAR(250) &lt;/p&gt; &lt;p&gt;-- Find all users in the database MyDB which are orphan.&lt;br&gt;DECLARE FIX_LOGIN_USER INSENSITIVE CURSOR&amp;nbsp; FOR&lt;br&gt;SELECT&amp;nbsp;&amp;nbsp; NAME&lt;br&gt;FROM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SYSUSERS&lt;br&gt;WHERE&amp;nbsp;&amp;nbsp;&amp;nbsp; ISSQLUSER = 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AND (SID IS NOT NULL &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AND SID &amp;lt;&amp;gt; 0x0)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AND SUSER_SNAME(SID) IS NULL&lt;br&gt;ORDER BY NAME&lt;br&gt;OPEN FIX_LOGIN_USER  &lt;p&gt;FETCH NEXT FROM FIX_LOGIN_USER&lt;br&gt;INTO @user_name&lt;br&gt;WHILE @@FETCH_STATUS = 0&lt;br&gt;&amp;nbsp; BEGIN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT @login_name = NULL&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT @login_name = LOGINNAME&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM&amp;nbsp;&amp;nbsp; MASTER.DBO.SYSLOGINS&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE&amp;nbsp; LOGINNAME = @user_name&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF (@login_name IS NULL)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BEGIN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT @err_msg = 'matching login does not exists for ' + @user_name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PRINT @err_msg&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PRINT 'creating login for ' + @user_name&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT @str = NULL&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT @str = 'exec master.dbo.sp_addlogin ' + +'''' + @user_name + '''' + ' ,' + '''password@123''' + ' , ' + '''MyDB'''&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT @str&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EXEC( @str)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PRINT 'created and now fixing ......'&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EXEC SP_CHANGE_USERS_LOGIN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'update_one' ,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @user_name ,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @user_name&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF @@ERROR &amp;lt;&amp;gt; 0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OR @@ROWCOUNT &amp;lt;&amp;gt; 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BEGIN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT @err_msg = 'error creating login for ' + @user_name&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PRINT @err_msg&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ELSE&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BEGIN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PRINT ' Only fixing ......'&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EXEC SP_CHANGE_USERS_LOGIN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'update_one' ,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @user_name ,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @login_name&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF @@ERROR &amp;lt;&amp;gt; 0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OR @@ROWCOUNT &amp;lt;&amp;gt; 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BEGIN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT @err_msg = 'error updating login for ' + @user_name&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PRINT @err_msg&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FETCH NEXT FROM FIX_LOGIN_USER&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTO @user_name&lt;br&gt;&amp;nbsp; END&lt;br&gt;CLOSE FIX_LOGIN_USER  &lt;p&gt;DEALLOCATE FIX_LOGIN_USER  &lt;p&gt;GO  &lt;p&gt;SET NOCOUNT OFF  &lt;p&gt;--------------------------&lt;/p&gt; &lt;p&gt;DISCLAIMER: SCRIPT IS PROVIDED "AS IS" WITHOUT WARRANTY REPRESENTATION OR CONDITION OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO CONDITIONS OR OTHER TERMS OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. THE USER ASSUMES THE ENTIRE RISK AS TO THE ACCURACY AND THE USE OF THIS SCRIPT.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7888865" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/blakhani/archive/tags/Script/default.aspx">Script</category></item></channel></rss>