怎么编写SQLSRVER同步ID脚本

43次阅读
没有评论

共计 4501 个字符,预计需要花费 12 分钟才能阅读完成。

本篇内容主要讲解“怎么编写 SQLSRVER 同步 ID 脚本”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“怎么编写 SQLSRVER 同步 ID 脚本”吧!

USE [master]
/****** Object: StoredProcedure [dbo].[sp_hexadecimal] Script Date: 2018/8/9 10:48:17 ******/
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE PROCEDURE [dbo].[sp_hexadecimal] 
 @binvalue varbinary(256), 
 @hexvalue varchar (514) OUTPUT 
AS 
DECLARE @charvalue varchar (514) 
DECLARE @i int 
DECLARE @length int 
DECLARE @hexstring char(16) 
SELECT @charvalue =  0x  
SELECT @i = 1 
SELECT @length = DATALENGTH (@binvalue) 
SELECT @hexstring =  0123456789ABCDEF  
WHILE (@i  = @length) 
BEGIN 
 DECLARE @tempint int 
 DECLARE @firstint int 
 DECLARE @secondint int 
 SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1)) 
 SELECT @firstint = FLOOR(@tempint/16) 
 SELECT @secondint = @tempint - (@firstint*16) 
 SELECT @charvalue = @charvalue + 
 SUBSTRING(@hexstring, @firstint+1, 1) + 
 SUBSTRING(@hexstring, @secondint+1, 1) 
 SELECT @i = @i + 1 
END 
 
SELECT @hexvalue = @charvalue 
GO
USE [master]
/****** Object: StoredProcedure [dbo].[sp_help_revlogin] Script Date: 2018/8/9 10:48:23 ******/
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE PROCEDURE [dbo].[sp_help_revlogin] @login_name sysname = NULL AS 
DECLARE @name sysname 
DECLARE @type varchar (1) 
DECLARE @hasaccess int 
DECLARE @denylogin int 
DECLARE @is_disabled int 
DECLARE @PWD_varbinary varbinary (256) 
DECLARE @PWD_string varchar (514) 
DECLARE @SID_varbinary 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 FOR 
 
 SELECT 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  ) AND p.name    sa  
ELSE 
 DECLARE login_curs CURSOR FOR 
 
 
 SELECT 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  ) AND p.name = @login_name 
OPEN login_curs 
 
FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin 
IF (@@fetch_status = -1) 
BEGIN 
 PRINT  No login(s) found.  
 CLOSE login_curs 
 DEALLOCATE login_curs 
 RETURN -1 
END 
SET @tmpstr =  /* sp_help_revlogin script.   
PRINT @tmpstr 
SET @tmpstr =  ** Generated   + CONVERT (varchar, GETDATE()) +   on   + @@SERVERNAME +   */  
PRINT @tmpstr 
PRINT   
WHILE (@@fetch_status   -1) 
BEGIN 
 IF (@@fetch_status   -2) 
 BEGIN 
 PRINT   
 SET @tmpstr =  -- Login:   + @name 
 PRINT @tmpstr 
 IF (@type IN (  G ,  U)) 
 BEGIN -- NT authenticated account/group 
 
 SET @tmpstr =  CREATE LOGIN   + QUOTENAME( @name ) +   FROM WINDOWS WITH DEFAULT_DATABASE = [ + @defaultdb + ]  
 END 
 ELSE BEGIN -- SQL Server authentication 
 -- obtain password and sid 
 SET @PWD_varbinary = CAST( LOGINPROPERTY( @name,  PasswordHash  ) AS varbinary (256) ) 
 EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT 
 EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT 
 
 -- obtain password policy state 
 SELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN  ON  WHEN 0 THEN  OFF  ELSE NULL END FROM sys.sql_logins WHERE name = @name 
 SELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1 THEN  ON  WHEN 0 THEN  OFF  ELSE NULL END FROM sys.sql_logins WHERE name = @name 
 
 SET @tmpstr =  CREATE LOGIN   + QUOTENAME( @name ) +   WITH PASSWORD =   + @PWD_string +   HASHED, SID =   + @SID_string +  , DEFAULT_DATABASE = [ + @defaultdb + ]  
 
 IF ( @is_policy_checked IS NOT NULL ) 
 BEGIN 
 SET @tmpstr = @tmpstr +  , CHECK_POLICY =   + @is_policy_checked 
 END 
 IF ( @is_expiration_checked IS NOT NULL ) 
 BEGIN 
 SET @tmpstr = @tmpstr +  , CHECK_EXPIRATION =   + @is_expiration_checked 
 END 
 END 
 IF (@denylogin = 1) 
 BEGIN -- login is denied access 
 SET @tmpstr = @tmpstr +   DENY CONNECT SQL TO   + QUOTENAME( @name ) 
 END 
 ELSE IF (@hasaccess = 0) 
 BEGIN -- login exists but does not have access 
 SET @tmpstr = @tmpstr +   REVOKE CONNECT SQL TO   + QUOTENAME( @name ) 
 END 
 IF (@is_disabled = 1) 
 BEGIN -- login is disabled 
 SET @tmpstr = @tmpstr +   ALTER LOGIN   + QUOTENAME( @name ) +   DISABLE  
 END 
 PRINT @tmpstr 
 END 
 
 FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin 
 END 
CLOSE login_curs 
DEALLOCATE login_curs 
RETURN 0 
GO

到此,相信大家对“怎么编写 SQLSRVER 同步 ID 脚本”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-20发表,共计4501字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)