рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╕рд╣реА рдирд┐рдХрд▓рд╛, SQL рд╕рд░реНрд╡рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирдП рд╕рд░реНрд╡рд░ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЬреЛ рдХрд╛рдлреА рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдЦрд╛рддреЗ рдкреБрд░рд╛рдиреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдмрдиреЗ рд░рд╣реЗред
рдХреНрдпрд╛ рдХрд░реЗрдВ? рджрд░рдЕрд╕рд▓, SQL Server 2005 рдореЗрдВ рдЦрд╛рддреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рд▓реЛрд╣реЗ рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдкреНрд░рд╡рд╛рд╕ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореБрдЭреЗ Microsoft рдХрд╛ рдПрдХ рд▓реЗрдЦ рдЖрдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╡рд░реНрдгрди рд╣реИ ...
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛: рдЗрд╕рдореЗрдВ рд╕рд░реНрд╡рд░ рдП рд╣реИ - рдЗрд╕рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд▓реЙрдЧрд┐рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд╕рд░реНрд╡рд░ рдмреА рд╣реИ - рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ (рд▓реЙрдЧрд┐рди) рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдХрд╛рд░реНрд░рд╡рд╛рдИ:
1. SQL рд╕рд░реНрд╡рд░ рдкреНрд░рдмрдВрдзрди рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рд░реНрд╡рд░ A рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
2. рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
рдЙрдкрдпреЛрдЧ рдорд╛рд╕реНрдЯрд░
GO
рдпрджрд┐ OBJECT_ID ('sp_hexadecimal') рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ
DROP рдкреНрд░рдХреНрд░рд┐рдпрд╛ sp_hexadecimal
GO
рдмрдирд╛рдПрдБ рдкреНрд░рдХреНрд░рд┐рдпрд╛ sp_hexadecimal
@binvalue рд╡рд░реНрдмрд┐рдирд░реА (256),
@hexvalue varchar (514) OUTPUT
рдХреЗ рд░реВрдк рдореЗрдВ
DECLARE @charvalue varchar (514)
DECLARE @i int
DECLARE рд▓рдВрдмрд╛рдИ int
DECLARE @hexstring рдЪрд╛рд░ (16)
рдЪрдпрди рдХрд░реЗрдВ @charvalue = '0x'
@I = 1 рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
рдЪрдпрдирд┐рдд рд▓рдВрдмрд╛рдИ = DATALENGTH (@binvalue)
рдЪрдпрди рдХрд░реЗрдВ @hexstring = '0123456789ABCDEF'
WHILE (@i <= рд▓рдВрдмрд╛рдИ )
рд╢реБрд░реВ
DECLARE @tempint int
DECLARE @firstint int
DECLARE @secondint int
рд╕реЗрд▓реЗрдХреНрдЯ @tempint = CONVERT (int, SUBSTRING (@binvalue, @ i, 1))
рдЪрдпрди рдХрд░реЗрдВ @firstint = FLOOR (@ рдЕрд╕реНрдерд╛рдпреА / 16)
SELECT @secondint = @tempint - (@ firstint * 16)
@Charvalue = @charvalue + рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
SUBSTRING (@hexstring, @ firstint + 1, 1) +
SUBSTRING (@hexstring, @ secondint + 1, 1)
@I = @i + 1 рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
рдЕрдВрдд
@Hexvalue = @charvalue рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
GO
рдпрджрд┐ OBJECT_ID ('sp_help_revlogin') рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ
DROP рдкреНрд░рдХреНрд░рд┐рдпрд╛ sp_help_revlogin
GO
рд░рдЪрдирд╛рддреНрдордХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ sp_help_revlogin @login_name sysname = NULL AS
DECLARE рдирд╛рдо sysname
рдбреЗрдХреНрд▓реЗрдпрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрд░рдЪрд░ (1)
DECLARE @hasaccess int
DECLARE @denylogin int
DECLARE @is_disabled int
DECLARE @PWD_varbinary varbinary (256)
DECLARE @PWD_string varchar (514)
DECLARE @SID_varbinary рд╕рдВрд╕реНрдХрд░рдг (85)
DECLARE @SID_string varchar (514)
DECLARE @tmpstr varchar (1024)
DECLARE @is_policy_checked varchar (3)
DECLARE @is_expiration_checked varchar (3)
DECLARE @defaultdb sysname
IF (@login_name IS NULL)
DECLARE login_curs CURSOR рдХреЗ рд▓рд┐рдП
P.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
sys.server_principals p LEFT JOIN sys.syslogins l
ON (l.name = p.name) WHERE p.type IN ('S', 'G', 'U') рдФрд░ p.name <> 'sa'
рд╡рд░рдирд╛
DECLARE login_curs CURSOR рдХреЗ рд▓рд┐рдП
P.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
sys.server_principals p LEFT JOIN sys.syslogins l
ON (l.name = p.name) рдЬрд╣рд╛рдБ p.type IN ('S', 'G', 'U') рдФрд░ p.name = @login_name
OPEN login_curs
FETCH NEXT FROM login_curs INTO @SID_varbinary, рдирд╛рдо , рдкреНрд░рдХрд╛рд░ , @is_disabled, @defaultdb, @hasaccess, @denylogin
IF (@@ fetch_status = -1)
рд╢реБрд░реВ
рдкреНрд░рд┐рдВрдЯ 'рдХреЛрдИ рдирд╛рдо рдирд╣реАрдВ рдорд┐рд▓рд╛ред'
CLOSE login_curs
рд▓реЙрдЧрд┐рди_рдХреЛрд░реНрд╕ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВ
рд╡рд╛рдкрд╕реА -1
рдЕрдВрдд
SET @tmpstr = '/ * sp_help_revlogin рд╕реНрдХреНрд░рд┐рдкреНрдЯ'
рдкреНрд░рд┐рдВрдЯ @tmpstr
SET @tmpstr = '** рдЬрдирд░реЗрдЯ' + CONVERT (varchar, GETDATE ()) + 'рдкрд░' + @@ SERVERNAME + '* /'
рдкреНрд░рд┐рдВрдЯ @tmpstr
рдкреНрд░рд┐рдВрдЯ ''
WHILE (@@ fetch_status <> -1)
рд╢реБрд░реВ
IF (@@ fetch_status <> -2)
рд╢реБрд░реВ
рдкреНрд░рд┐рдВрдЯ ''
SET @tmpstr = '- рд▓реЙрдЧрд┐рди:' + рдирд╛рдо
рдкреНрд░рд┐рдВрдЯ @tmpstr
IF ( рдЯрд╛рдЗрдк рдХрд░реЗрдВ IN ('G', 'U'))
BEGIN - NT рдкреНрд░рдорд╛рдгрд┐рдд рдЦрд╛рддрд╛ / рд╕рдореВрд╣
SET @tmpstr = 'CREATE LOGIN' + QUOTENAME ( рдирд╛рдо ) + 'WINDOWS рд╡рд┐рде DEFAULT_DATABASE = [' + @defaultdb + ']' '
рдЕрдВрдд
ELSE BEGIN - SQL рд╕рд░реНрд╡рд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг
- рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ рд╕рд╛рдЗрдб рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
SET @PWD_varbinary = CAST (LOGINPROPERTY ( рдирд╛рдо , 'рдкрд╛рд╕рд╡рд░реНрдбрд╣реИрд╢') AS varbinary (256))
EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT
EXEC sp_hexadecimal @SID_varbinary, @SID_string OUT
- рдкрд╛рд╕рд╡рд░реНрдб рдкреЙрд▓рд┐рд╕реА рд░рд╛рдЬреНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ @is_policy_checked = CASE is_policy_checked рдЬрдм 1 'рдкрд░' рд╣реИ, рддреЛ 'рдмрдВрдж' ELSE NULL END FROM sys.sql_logins рд╕реЗ рдХрд╣рд╛рдБ = рдирд╛рдо
рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ @is_expiration_checked = CASE is_expiration_checked рдЬрдм 1 'рдкрд░' рддрдм рд╣реЛ, рдЬрдм 'рдмрдВрдж' ELSE NULL END FROM sys.sql_logins рдкрд░ рдЬрд╛рдПрдВ = рдирд╛рдо
SET @tmpstr = 'CREATE LOGIN' + QUOTENAME ( рдирд╛рдо ) + 'PASSWORD рдХреЗ рд╕рд╛рде =' + @ PWD_string + 'HASHED, SID =' + @SID_string + ', DEFAULT_DATABASE = [' + @defaultdb + ']]
IF (@is_policy_checked IS NULL рдирд╣реАрдВ рд╣реИ)
рд╢реБрд░реВ
SET @tmpstr = @tmpstr + ', CHECK_POLICY =' + @is_policy_hecked
рдЕрдВрдд
рдпрджрд┐ (@is_expiration_checked рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ)
рд╢реБрд░реВ
SET @tmpstr = @tmpstr + ', CHECK_EXPIRATION =' + @is_expiration_hecked
рдЕрдВрдд
рдЕрдВрдд
IF (@denylogin = 1)
BEGIN - рд▓реЙрдЧрд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╡рдВрдЪрд┐рдд рд╣реИ
SET @tmpstr = @tmpstr + '; DENN рдХрдиреЗрдХреНрдЯ SQL рдХреЛ '+ QUOTENAME ( рдирд╛рдо )
рдЕрдВрдд
ELSE IF (@hasaccess = 0)
BEGIN - рд▓реЙрдЧрд┐рди рдореМрдЬреВрдж рд╣реИ рд▓реЗрдХрд┐рди рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИ
SET @tmpstr = @tmpstr + '; REVOKE рдХрдиреЗрдХреНрдЯ SQL рдХреЛ '+ QUOTENAME ( рдирд╛рдо )
рдЕрдВрдд
IF (@is_disabled = 1)
BEGIN - рд▓реЙрдЧрд┐рди рдЕрдХреНрд╖рдо рд╣реИ
SET @tmpstr = @tmpstr + '; ALTER LOGIN '+ QUOTENAME ( рдирд╛рдо ) +' DISABLE '
рдЕрдВрдд
рдкреНрд░рд┐рдВрдЯ @tmpstr
рдЕрдВрдд
FETCH NEXT FROM login_curs INTO @SID_varbinary, рдирд╛рдо , рдкреНрд░рдХрд╛рд░ , @is_disabled, @defaultdb, @hasaccess, @denylogin
рдЕрдВрдд
CLOSE login_curs
рд▓реЙрдЧрд┐рди_рдХреЛрд░реНрд╕ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВ
рд╡рд╛рдкрд╕реА реж
GO
3. рд╕реНрдХреНрд░рд┐рдкреНрдЯ 2 рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреА рд╣реИред рд╣рдореЗрдВ sp_help_revlogin рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рд╕рд░реНрд╡рд░ A рдкрд░ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВ:
EXEC sp_help_revlogin
4. рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣рдореЗрдВ рд▓реЙрдЧрд┐рди рдХреЛ рджреВрд╕рд░реЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдЧреАред рдЬреИрд╕реЗ рддрд╛рд░ рд╕реЗ
рдХреНрд░рд┐рдПрдЯрд┐рд╡ рд▓реЙрдЧ [рд▓реЙрдЧрд┐рди] PASSWORD рдХреЗ рд╕рд╛рде = 0x0100F43F09430FB0C4B5F613D2042E0FF0189E7894ADC460FB рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, SID = 0x9EC29C663D6533AF53B4F8B88484848484, DEFA
рдЕрдкрдиреА рдЬрд░реВрд░рдд рдХрд╛ рд╕рд╛рдорд╛рди рдЪреБрдиреЗрдВред рдФрд░ рд╕рд░реНрд╡рд░ рдмреА рдкрд░ рдЗрди рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВред
5. рд╡реЛрдЗрд▓рд╛! рдЖрдирдиреНрджред =)
рдореВрд▓ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдпрд╣рд╛рдБ ред