1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
|
-- Эта процедура произведет сценарий имен пользователя создавать для вас
СОЗДАЙТЕ ПРОЦЕДУРУ [dbo]. [sp_dba_security_revlogin]
sysname = NULL @login_name,
tinyint @script_server_roles = 1
КАК
ОБЪЯВИТЕ sysname @name
ОБЪЯВИТЕ @xstatus int
ОБЪЯВИТЕ @binpwd varbinary (256)
ОБЪЯВИТЕ sysname @txtpwd
ОБЪЯВИТЕ @tmpstr varchar (256)
ОБЪЯВИТЕ @SID_varbinary varbinary (85)
ОБЪЯВИТЕ @SID_string varchar (256)
ЕСЛИ (@LOGIN_NAME БУДЕТ NULL) НАЧНИТЕ
ОБЪЯВИТЕ СТРЕЛКУ login_curs ДЛЯ
ВЫБЕРИТЕ sid, имя, 2 xstatus, password_hash ОТ sys.sql_logins
ГДЕ назовите <> «sa» и is_disabled = 0
соединение все
выберите sid, имя, 4 xstatus, null от sys.server_principals
где тип = «u» и is_disabled = 0
КОНЕЦ ЕЩЕ НАЧИНАЕТ
ОБЪЯВИТЕ СТРЕЛКУ login_curs ДЛЯ
ВЫБЕРИТЕ sid, имя, 2 xstatus, password_hash ОТ sys.sql_logins
ГДЕ назовите <> «sa» и is_disabled = 0 И имя = @login_name
соединение все
выберите sid, имя, 4 xstatus, null от sys.server_principals
где тип = «u» и is_disabled = 0 И имя = @login_name
КОНЕЦ
РАСКРОЙТЕ login_curs
FETCH ЗАТЕМ ОТ login_curs В @SID_varbinary, @name, @xstatus, @binpwd
ЕСЛИ (@@fetch_status = -1), то
НАЧНИТЕ
НЕ НАПЕЧАТАЙТЕ «никакие ые имена пользователя.»
ЗАКРОЙТЕ login_curs
DEALLOCATE login_curs
ВОЗВРАТИТЕ -1
КОНЕЦ
УСТАНОВИТЕ @tmpstr = «сценарий sp_help_revlogin/*»
НАПЕЧАТАЙТЕ @tmpstr
УСТАНОВИТЕ @tmpstr = «** произведено»
+ НОВООБРАЩЕННЫЙ (varchar, GETDATE ()) + "ОН"о + @@SERVERNAME + «*»
@tmpstr ПЕЧАТИ
ПЕЧАТЬ ''
ПЕЧАТЬ «ОБЪЯВЛЯЕТ sysname @pwd»
ПОКА (@@FETCH_STATUS <> -1) НАЧНИТЕ
ЕСЛИ (@@FETCH_STATUS <> -2) НАЧНИТЕ
НАПЕЧАТАЙТЕ ''
УСТАНОВИТЕ @tmpstr = «-- Имя пользователя: » + @name
@tmpstr ПЕЧАТИ
ЕСЛИ (@XSTATUS & 4) = 4 НАЧИНАЕТ -- Учет/группа authenticated NT
ЕСЛИ (@XSTATUS & 1) = 1 НАЧИНАЕТ -- Отказывают имени пользователя NT доступ
УСТАНОВИТЕ @tmpstr = '''' + @name + '''' оригинала. .sp_denylogin EXEC
НАПЕЧАТАЙТЕ @tmpstr
КОНЕЦ ЕЩЕ НАЧИНАЕТ -- Имя пользователя NT имеет доступ
УСТАНОВИТЕ @tmpstr = '''' + @name + '''' оригинала. .sp_grantlogin EXEC
НАПЕЧАТАЙТЕ @tmpstr
КОНЕЦ
КОНЕЦ ЕЩЕ НАЧИНАЕТ -- Удостоверение подлинности сервера SQL
ЕСЛИ (@BINPWD НЕ НУЛЕВО) НАЧНИТЕ -- Non-null пароль
@binpwd sp_dba_security_scriptLogin EXEC, @txtpwd ВНЕ
ЕСЛИ (@XSTATUS & 2048) = 2048 НАЧИНАЮТ
УСТАНОВИТЕ @tmpstr = «УСТАНОВИТЕ @pwd = НОВООБРАЩЕННЫЙ (varchar (256),» + @txtpwd + ")»
КОНЕЦ ЕЩЕ НАЧИНАЕТ
УСТАНОВИТЕ @tmpstr = «УСТАНОВИТЕ @pwd = НОВООБРАЩЕННЫЙ (varbinary (256),» + @txtpwd + ")»
КОНЕЦ
@tmpstr ПЕЧАТИ
sp_dba_security_scriptLogin EXEC @SID_varbinary, @SID_string ВНЕ
УСТАНОВИТЕ @tmpstr = '''' + @name оригинала. .sp_addlogin EXEC
+ ''', @pwd, @sid = «+ @SID_string +», @encryptopt = '
КОНЕЦ ЕЩЕ НАЧИНАЕТ -- Нулевой пароль
sp_dba_security_scriptLogin EXEC @SID_varbinary, @SID_string ВНЕ
УСТАНОВИТЕ @tmpstr = '''' + @name оригинала. .sp_addlogin EXEC
+ ''', NULL, @sid = «+ @SID_string +», @encryptopt = '
КОНЕЦ
ЕСЛИ (@XSTATUS & 2048) = 2048 НАЧИНАЮТ
-- имя пользователя модернизированное от 6.5
УСТАНОВИТЕ ''' @tmpstr = skip_encryption_old @tmpstr + '''
КОНЕЦ ЕЩЕ НАЧИНАЕТ
УСТАНОВИТЕ ''' @tmpstr = skip_encryption @tmpstr + '''
КОНЕЦ
@tmpstr ПЕЧАТИ
-- Роли сервера ручки:
ЕСЛИ ISNULL, ТО (@SCRIPT_SERVER_ROLES, 1) = 1 НАЧИНАЮТ
ЕСЛИ (@XSTATUS &16) = 16 НАЧИНАЮТ
УСТАНОВИТЕ @tmpstr = '''' + @name + ''' sp_addsrvrolemember EXEC, '' ''' sysadmin
НАПЕЧАТАЙТЕ @tmpstr
КОНЕЦ
ЕСЛИ (@XSTATUS & 32) = 32 НАЧИНАЮТ
УСТАНОВИТЕ @tmpstr = '''' + @name + ''' sp_addsrvrolemember EXEC, '' ''' securityadmin
НАПЕЧАТАЙТЕ @tmpstr
КОНЕЦ
ЕСЛИ (@XSTATUS & 64) = 64 НАЧИНАЮТ
УСТАНОВИТЕ @tmpstr = '''' + @name + ''' sp_addsrvrolemember EXEC, '' ''' serveradmin
НАПЕЧАТАЙТЕ @tmpstr
КОНЕЦ
ЕСЛИ (@XSTATUS & 128) = 128 НАЧИНАЮТ
УСТАНОВИТЕ @tmpstr = '''' + @name + ''' sp_addsrvrolemember EXEC, '' ''' setupadmin
НАПЕЧАТАЙТЕ @tmpstr
КОНЕЦ
ЕСЛИ (@XSTATUS & 256) = 256 НАЧИНАЮТ
УСТАНОВИТЕ @tmpstr = '''' + @name + ''' sp_addsrvrolemember EXEC, '' ''' processadmin
НАПЕЧАТАЙТЕ @tmpstr
КОНЕЦ
ЕСЛИ (@XSTATUS & 512) = 512 НАЧИНАЮТ
УСТАНОВИТЕ @tmpstr = '''' + @name + ''' sp_addsrvrolemember EXEC, '' ''' diskadmin
НАПЕЧАТАЙТЕ @tmpstr
КОНЕЦ
ЕСЛИ (@XSTATUS & 1024) = 1024 НАЧИНАЮТ
УСТАНОВИТЕ @tmpstr = '''' + @name + ''' sp_addsrvrolemember EXEC, '' ''' dbcreator
НАПЕЧАТАЙТЕ @tmpstr
КОНЕЦ
ЕСЛИ (@XSTATUS & 4096) = 4096 НАЧИНАЮТ
УСТАНОВИТЕ @tmpstr = '''' + @name + ''' sp_addsrvrolemember EXEC, '' ''' bulkadmin
НАПЕЧАТАЙТЕ @tmpstr
КОНЕЦ
КОНЕЦ
-- Роли сервера ручки конца
КОНЕЦ
КОНЕЦ
FETCH ЗАТЕМ ОТ login_curs В @SID_varbinary, @name, @xstatus, @binpwd
КОНЕЦ
БЛИЗКИЕ login_curs
DEALLOCATE login_curs
ВОЗВРАЩЕНИЕ 0
ИДИТЕ
-- Это зафиксирует имена пользователя сирот
ИСПОЛЬЗУЙТЕ [db_dba]
ИДИТЕ
/Предмет ******: StoredProcedure [dbo]. Дата сценария [ USP_DBA_FixOrphanedLogins]: 06/29/2010 12:07: 23 ******/
УСТАНОВИТЕ ANSI_NULLS ДАЛЬШЕ
ИДИТЕ
УСТАНОВИТЕ QUOTED_IDENTIFIER ДАЛЬШЕ
ИДИТЕ
Создайте процедуру [dbo]. [USP_DBA_FixOrphanedLogins]
как
начните
установите nocount дальше
/** Покажите имена пользователя будут ** угрозой/
ОБЪЯВИТЕ @Collation varchar (100),
@SQL VARCHAR (2000),
@rc int
СОЗДАЙТЕ ##TempSync ТАБЛИЦЫ (DB_NME Varchar (50), DBUserName varchar (50), SysLoginName varchar (50))
ВЫБЕРИТЕ @Collation = НОВООБРАЩЕННЫЙ (SYSNAME, DatabasePropertyEx («оригинал», «сверку "))
УСТАНОВИТЕ @SQL = 'ПОЛЬЗА [?]
ВЫБЕРИТЕ ''? '' DB_NME, A.name DBUserName, inname SysLoginName B.log
ОТ sysusers a
СОЕДИНИТЕ master.dbo.syslogins b
НА A.name Collate «+ @Collation +» = B.Name
СОЕДИНИТЕ master.dbo.sysdatabases c
НА C.Name = ''? '' ГДЕ issqluser = 1
И (A.sid не НУЛЕВО
И A.sid <> 0x0)
И suser_sname (A.sid) НУЛЕВО
И (C.status & 32) = 0 --нагрузка
И (C.status & 64) = 0 --pre спасение
И (C.status & 128) = 0 --брать
И (C.status & 256) = 0 --взято
И (C.status & 512) = 0 --offline
И (C.status & 1024) = 0 --прочитано только
ЗАКАЗ A.name
ВСТАВКА в @SQL sp_msforeachdb ##TempSync EXEC
-- ВЫБЕРИТЕ * ОТ ##TempSync
установите @rc = @@rowcount
УПАДИТЕ ##TempSync ТАБЛИЦЫ
если @rc = 0
начните
raiserror («отсутствие осиротелый имен пользователя, котор нужно обращаться. », - 1, - 1)
возвращение 0
конец
/** Зафиксируйте осиротелый ** имен пользователя/
ВЫБЕРИТЕ =CONVERT @Collation (SYSNAME, DatabasePropertyEx («оригинал», «сверку "))
УСТАНОВИТЕ @SQL = 'ПОЛЬЗА [?]
ОБЪЯВИТЕ @DBUserName varchar (50)
ОБЪЯВИТЕ @SysLoginName varchar (50)
ОБЪЯВИТЕ СТРЕЛКУ SyncDBLogins ДЛЯ ОТБОРНОГО A.name DBUserName, inname SysLoginName B.log
ОТ sysusers СОЕДИНЯТЬ master.dbo.syslogins B НА A.name Collate '+ @Collation +
'= B.Name СОЕДИНЯЮТ master.dbo.sysdatabases C НА C.Name = ''? ''
ГДЕ issqluser = 1 И (A.sid НЕ БУДЕТ НУЛЕВО И A.sid <> 0x0) И suser_sname (A.sid) НУЛЕВО
И (C.status & 32) = 0 --Нагрузка
И (C.status & 64) = 0 --pre спасение
И (C.status & 128) = 0 --брать
И (C.status & 256) = 0 --взято
И (C.status & 512) = 0 --offline
И (C.status & 1024) = 0 --прочитано только
ЗАКАЗ A.name
РАСКРОЙТЕ SyncDBLogins
FETCH ЗАТЕМ ОТ SyncDBLogins В @DBUserName, @SysLoginName
ПОКА @@FETCH_STATUS = 0 НАЧИНАЕТ
Sp_change_users_login '' update_one '' EXEC, @DBUserName, @SysLoginName
FETCH ЗАТЕМ ОТ SyncDBLogins В @DBUserName, @SysLoginName
КОНЕЦ
БЛИЗКОЕ SyncDBLogins
DEALLOCATE SyncDBLogins
@SQL sp_msforeachdb EXEC
возвращение 0
конец
ИДИТЕ
|