A DBA require to keep users’
information from a database before refresh/restore task.
The script can be used to
generate a script out the database having all the user information. It will
generate User Create Script.
Conditional applied in the script,
if user already exist in the destination database then it will skip otherwise
create.
DECLARE @cur_user CURSOR
DECLARE @ls_user NVARCHAR(200)
DECLARE @ls_name NVARCHAR(200)
DECLARE @lc_type CHAR(1)
SET @cur_user = CURSOR
FOR SELECT NAME,
           Suser_sname(sid) AS LOGIN_NAME,
           type
    FROM   sys.database_principals
    WHERE  type IN ( 'U', 'S', 'G' )
           AND
Suser_sname(sid) IS NOT NULL
           AND
principal_id > 4
           AND
NAME NOT LIKE '#%'
           AND
NAME NOT LIKE 'NT AUTHORITY%'
OPEN @cur_user
FETCH NEXT FROM @cur_user INTO
@ls_user, @ls_name,
@lc_type
WHILE ( @@FETCH_STATUS = 0
)
  BEGIN
      PRINT
'IF NOT EXISTS (Select name from sys.sysusers where
name='''
            +
@ls_user + ''') create
User [' + @ls_user + ']'
            +
' FOR LOGIN [' +
@ls_name + '];'
      IF ( @lc_type = 'S' )
        BEGIN
            PRINT
'IF EXISTS (Select name from sys.sysusers where
name='''
                  + @ls_user
                  + ''') exec
sp_change_users_login ''update_one'',['
                  + @ls_user + '],[' + @ls_name + '];'
        END
      FETCH
NEXT FROM
@cur_user INTO @ls_user,
@ls_name, @lc_type
  END
CLOSE @cur_user
DEALLOCATE @cur_user 
 
No comments:
Post a Comment