SQL Server Scripts to Copy User Permission

I have the need to copy user permissions from one user to another.
 
I have two SQL Server database. The structure of both database are the same.  The first db is a source database with permission for set for a specific user (User1).  The second database has a new user (User2) with no permissions.  I want user2 have the same permission of user1.  The following links/scripts allowed me to copy user permissions.
 

/* ********************************************
******************************************** */

SET

NOCOUNT ON

DECLARE

@OldUser sysname, @NewUser sysname

SET

@OldUser = ‘User1

SET

@NewUser = ‘User2’

SELECT

‘USE’ + SPACE(1) + QUOTENAME(DB_NAME()) AS ‘–Database Context’

 

SELECT

‘–Cloning permissions from’ + SPACE(1) + QUOTENAME(@OldUser) + SPACE(1) + ‘to’ + SPACE(1) + QUOTENAME(@NewUser) AS ‘–Comment’

 
SELECT

‘EXEC sp_addrolemember @rolename =’

+ SPACE(1) + QUOTENAME(USER_NAME(rm.role_principal_id), ””) + ‘, @membername =’ + SPACE(1) + QUOTENAME(@NewUser, ””) AS ‘–Role Memberships’

FROM

sys.database_role_members AS rm

WHERE

USER_NAME(rm.member_principal_id) = @OldUser

ORDER

BY rm.role_principal_id ASC

 
SELECT

CASE WHEN perm.state <> ‘W’ THEN perm.state_desc ELSE ‘GRANT’ END

+ SPACE(1) + perm.permission_name + SPACE(1) + ‘ON ‘ + QUOTENAME(USER_NAME(obj.schema_id)) + ‘.’ + QUOTENAME(obj.name)

+ CASE WHEN cl.column_id IS NULL THEN SPACE(0) ELSE ‘(‘ + QUOTENAME(cl.name) + ‘)’ END

+ SPACE(1) + ‘TO’ + SPACE(1) + QUOTENAME(@NewUser) COLLATE database_default

+ CASE WHEN perm.state <> ‘W’ THEN SPACE(0) ELSE SPACE(1) + ‘WITH GRANT OPTION’ END AS ‘–Object Level Permissions’

FROM

sys.database_permissions AS perm

INNER JOIN

sys.objects AS obj

ON perm.major_id = obj.[object_id]

INNER JOIN

sys.database_principals AS usr

ON perm.grantee_principal_id = usr.principal_id

LEFT JOIN

sys.columns AS cl

ON cl.column_id = perm.minor_id AND cl.[object_id] = perm.major_id

WHERE

usr.name = @OldUser

ORDER

BY perm.permission_name ASC, perm.state_desc ASC

 
SELECT

CASE WHEN perm.state <> ‘W’ THEN perm.state_desc ELSE ‘GRANT’ END

+ SPACE(1) + perm.permission_name + SPACE(1)

+ SPACE(1) + ‘TO’ + SPACE(1) + QUOTENAME(@NewUser) COLLATE database_default

+ CASE WHEN perm.state <> ‘W’ THEN SPACE(0) ELSE SPACE(1) + ‘WITH GRANT OPTION’ END AS ‘–Database Level Permissions’

FROM

sys.database_permissions AS perm

INNER JOIN

sys.database_principals AS usr

ON perm.grantee_principal_id = usr.principal_id

WHERE

usr.name = @OldUser

AND

perm.major_id = 0

ORDER

BY perm.permission_name ASC, perm.state_desc ASC

 
 

/* ********************************************
******************************************** */

SELECT
CASE

protecttype WHEN 204 THEN ‘GRANT_W_GRANT ‘

WHEN 205 THEN ‘GRANT ‘

WHEN 206 THEN ‘REVOKE ‘

ELSE

‘DUMMY GRANT’ END

+

CASE action WHEN 26 THEN ‘REFERENCES’

WHEN 178 THEN ‘CREATE FUNCTION’

WHEN 193 THEN ‘SELECT’

WHEN 195 THEN ‘INSERT’

WHEN 196 THEN ‘DELETE’

WHEN 197 THEN ‘UPDATE’

WHEN 198 THEN ‘CREATE TABLE’

WHEN 203 THEN ‘CREATE DATABASE’

WHEN 207 THEN ‘CREATE VIEW’

WHEN 222 THEN ‘CREATE PROCEDURE’

WHEN 224 THEN ‘EXECUTE’

WHEN 228 THEN ‘BACKUP DATABASE’

WHEN 233 THEN ‘CREATE DEFAULT’

WHEN 235 THEN ‘BACKUP LOG’

WHEN 236 THEN ‘CREATE RULE’

ELSE ‘ DUMMY ‘ END + ‘ ON ‘

+

so.name + ‘ TO <Your Role/User on Target Server>’

from

sysprotects sp

inner

join sysobjects so on (so.id=sp.id)

inner

join sysusers s on (sp.uid=s.uid)

WHERE

s.[name] in (‘User1’)

 
 
 

/* ******************************************************
The following Script just provides a select of the previous script
****************************************************** */

SELECT
CASE protecttype WHEN 204 THEN ‘GRANT_W_GRANT ‘

WHEN 205 THEN ‘GRANT ‘

WHEN 206 THEN ‘REVOKE ‘

ELSE ‘DUMMY GRANT’

END

,CASE action WHEN 26 THEN ‘REFERENCES’

WHEN 178 THEN ‘CREATE FUNCTION’

WHEN 193 THEN ‘SELECT’

WHEN 195 THEN ‘INSERT’

WHEN 196 THEN ‘DELETE’

WHEN 197 THEN ‘UPDATE’

WHEN 198 THEN ‘CREATE TABLE’

WHEN 203 THEN ‘CREATE DATABASE’

WHEN 207 THEN ‘CREATE VIEW’

WHEN 222 THEN ‘CREATE PROCEDURE’

WHEN 224 THEN ‘EXECUTE’

WHEN 228 THEN ‘BACKUP DATABASE’

WHEN 233 THEN ‘CREATE DEFAULT’

WHEN 235 THEN ‘BACKUP LOG’

WHEN 236 THEN ‘CREATE RULE’

ELSE ‘ DUMMY ‘

END

,*

from

sysprotects sp

inner

join sysobjects so on (so.id=sp.id)

inner

join sysusers s on (sp.uid=s.uid)

WHERE

s.[name] in (‘User1’)

 
 

Advanced Regular Expression – Groups Name Capture LookAround

 
Zip Code Regular Expression
^([0-9]{5}-?([0-9]{4})?){1}$
 
I’ve been doing alot of regular expression lately and need some place to put my resources.  Below are some very good links for regular Expressions.
 
How to validate a valid GUID Value in C#
 
Password Regex
 

Python Library Reference

http://www.python.org/doc/current/lib/re-syntax.html

 

Groups, Name Capture, LookAround, Readability and Maintainability, and Delegates

 
One of the better website pertaining to Regular Expression
 
Very Simple example of Named Groups, Backreferences, and Regex.Replace
 
MSDN Article on Backreferences
 
Regular Expression Replace in SQL 2005 (via the CLR)
 
SQL Server 2005 Regular Expressions Make Pattern Matching And Data Extraction Easier
 
A T-SQL Regular Expression Library for SQL Server 2005
 
 
Regular Expression Cheat Sheat

generate insert script sql server

I’m using a backup database to do some testing.  This database already has data in it, but I would Like to add some additional data to it, possibly through a use rinterface and scripts.  If everything works well, I want to add the data that I added to backup database to another database.  I don’t want to have to do an export or Bulk Copy.  It seems like to many steps.  What I would rather have is just an insert statement the would crate the data. 
 
The following links are for script that generate insert statements:
 
This one is very simple, but I needed to change nvarchar(…)s to nvarchar(Max).
 
Here are some more links generate insert script for sql server