It's pretty easy to do depending on how complex you want the script to be. I've got one that adds a read only login to all the databases (user) for reporting.
Check out BOL. sp_grantlogin, sp_addlogin, sp_grantdbaccess, sp_addrolemember, fixed database roles.
Declare @Login nvarchar(255) --NT or SQL login , @Pwd nvarchar(255) --SQL login pwd, not needed for NT login , @Default nvarchar(255) --Default DB assigned to login , @DBRole nvarchar(255) --Fixed database role
Set @Login = 'Reader' Set @Pwd = 'reader' Set @Default = Null Set @DBRole = 'db_datareader'
If @Default Is Null Select Top 1 @Default = name From master.dbo.sysdatabases Where dbid > 4
If Exists (Select * From master.dbo.syslogins Where name = @Login) Begin Print 'Login already exists.' Goto DBAccess End
Insert Into #Security Select 'If Not Exists (Select * From ' + name + '.dbo.sysusers Where name = ''' + @Login + ''') Exec ' + name + '.dbo.sp_grantdbaccess ''' + @Login + ''', ''' + @Login + '''' From master.dbo.sysdatabases Where dbid > 4
Exec master.dbo.sp_ExecResultSet 'Select sql From #Security'
Truncate Table #Security
Insert Into #Security Select 'If Not Exists (Select * From ' + name + '.dbo.sysusers u1 Inner Join ' + name + '.dbo.sysmembers m On u1.uid = m.memberuid Inner Join ' + name + '.dbo.sysusers u2 On m.groupuid = u2.uid And u2.name = ''' + @DBRole + ''' Where u1.name = ''' + @Login + ''') Exec ' + name + '.dbo.sp_addrolemember ''' + @DBRole + ''', ''' + @Login + '''' From master.dbo.sysdatabases Where dbid > 4
Exec master.dbo.sp_ExecResultSet 'Select sql From #Security'