sp_addlogin

None.gif create   procedure  sp_addlogin
None.gif    
@loginame         sysname
None.gif   ,
@passwd          sysname  =   Null
None.gif   ,
@defdb           sysname  =   ' master '        --  UNDONE: DEFAULT CONFIGURABLE???
None.gif
   , @deflanguage     sysname  =   Null
None.gif   ,
@sid              varbinary ( 16 =   Null
None.gif   ,
@encryptopt          varchar ( 20 =   Null
None.gif
AS
None.gif    
--  SETUP RUNTIME OPTIONS / DECLARE VARIABLES --
None.gif
     set  nocount  on
None.gif    
Declare   @ret      int      --  return value of sp call
None.gif

None.gif    
--  CHECK PERMISSIONS --
None.gif
     IF  ( not   is_srvrolemember ( ' securityadmin ' =   1 )
None.gif    
begin
None.gif       
dbcc  auditevent ( 104 1 0 @loginame NULL NULL @sid )
None.gif       
raiserror ( 15247 , - 1 , - 1 )
None.gif       
return  ( 1 )
None.gif    
end
None.gif    
ELSE
None.gif    
begin
None.gif       
dbcc  auditevent ( 104 1 1 @loginame NULL NULL @sid )
None.gif    
end
None.gif
None.gif    
--  DISALLOW USER TRANSACTION --
None.gif
     set  implicit_transactions  off
None.gif    
IF  ( @@trancount   >   0 )
None.gif    
begin
None.gif        
raiserror ( 15002 , - 1 , - 1 , ' sp_addlogin ' )
None.gif        
return  ( 1 )
None.gif    
end
None.gif
None.gif    
--  VALIDATE LOGIN NAME AS:
None.gif
     --   (1) Valid SQL Name (SQL LOGIN)
None.gif
     --   (2) No backslash (NT users only)
None.gif
     --   (3) Not a reserved login name
None.gif
     execute   @ret   =  sp_validname  @loginame
None.gif    
if  ( @ret   <>   0 )
None.gif        
return  ( 1 )
None.gif    
if  ( charindex ( ' \ ' @loginame >   0 )
None.gif    
begin
None.gif        
raiserror ( 15006 , - 1 , - 1 , @loginame )
None.gif        
return  ( 1 )
None.gif    
end
None.gif
None.gif    
-- Note: different case sa is allowed.
None.gif
     if  ( @loginame   =   ' sa '   or   lower ( @loginame in  ( ' public ' ))
None.gif    
begin
None.gif        
raiserror ( 15405 - 1  , - 1 @loginame )
None.gif        
return  ( 1 )
None.gif    
end
None.gif
None.gif    
--  LOGIN NAME MUST NOT ALREADY EXIST --
None.gif
     if   exists ( select   *   from  master.dbo.syslogins  where  loginname  =   @loginame )
None.gif    
begin
None.gif        
raiserror ( 15025 , - 1 , - 1 , @loginame )
None.gif        
return  ( 1 )
None.gif    
end
None.gif
None.gif    
--  VALIDATE DEFAULT DATABASE --
None.gif
     IF   db_id ( @defdb IS   NULL
None.gif    
begin
None.gif        
raiserror ( 15010 , - 1 , - 1 , @defdb )
None.gif        
return  ( 1 )
None.gif    
end
None.gif
None.gif    
--  VALIDATE DEFAULT LANGUAGE --
None.gif
     IF  ( @deflanguage   IS   NOT   Null )
None.gif    
begin
None.gif        
Execute   @ret   =  sp_validlang  @deflanguage
None.gif        
IF  ( @ret   <>   0 )
None.gif            
return  ( 1 )
None.gif    
end
None.gif    
ELSE
None.gif    
begin
None.gif        
select   @deflanguage   =  name  from  master.dbo.syslanguages
None.gif        
where  langid  =   @@default_langid      -- server default language
None.gif

None.gif        
if   @deflanguage   is   null
None.gif            
select   @deflanguage   =  N ' us_english '
None.gif    
end
None.gif
None.gif    
--  VALIDATE SID IF GIVEN --
None.gif
     if  (( @sid   IS   NOT   Null and  ( datalength ( @sid <>   16 ))
None.gif    
begin
None.gif        
raiserror ( 15419 , - 1 , - 1 )
None.gif         
return  ( 1 )
None.gif    
end
None.gif    
else   if   @sid   is   null
None.gif        
select   @sid   =   newid ()
None.gif    
if  ( suser_sname ( @sid IS   NOT   Null )
None.gif    
begin
None.gif        
raiserror ( 15433 , - 1 , - 1 )
None.gif         
return  ( 1 )
None.gif    
end
None.gif
None.gif    
--  VALIDATE AND USE ENCRYPTION OPTION --
None.gif
     declare   @xstatus   smallint
None.gif    
select   @xstatus   =   2      --  access
None.gif
     if   @encryptopt   is   null
None.gif        
select   @passwd   =  pwdencrypt( @passwd )
None.gif    
else   if   @encryptopt   =   ' skip_encryption_old '
None.gif    
begin
None.gif        
select   @xstatus   =   @xstatus   |   0x800 ,     --  old-style encryption
None.gif
             @passwd   =   convert (sysname,  convert ( varbinary ( 30 ),  convert ( varchar ( 30 ),  @passwd )))
None.gif    
end
None.gif    
else   if   @encryptopt   <>   ' skip_encryption '
None.gif    
begin
None.gif        
raiserror ( 15600 , - 1 , - 1 , ' sp_addlogin ' )
None.gif        
return   1
None.gif    
end
None.gif
None.gif    
--  ATTEMPT THE INSERT OF THE NEW LOGIN --
None.gif
     BEGIN   TRAN
None.gif        
INSERT   INTO  master.dbo.sysxlogins  VALUES
None.gif            (
NULL @sid @xstatus getdate (),
None.gif                
getdate (),  @loginame convert ( varbinary ( 256 ),  @passwd ),
None.gif                
db_id ( @defdb ),  @deflanguage )
None.gif
None.gif        
--  check that there are no duplicate rows with the same name
None.gif
         if   @@error   <>   0   or   exists ( select   *   from  master.dbo.sysxlogins  with  (nolock)  where  srvid  IS   NULL   and  name  =   @loginame   and  sid  <>   @sid )
None.gif        
begin
None.gif            
raiserror ( 15025 , - 1 , - 1 , @loginame )
None.gif            
ROLLBACK   TRAN
None.gif            
return  ( 1 )
None.gif        
end                      
None.gif
None.gif    
COMMIT   TRAN
None.gif
None.gif    
--  UPDATE PROTECTION TIMESTAMP FOR MASTER DB, TO INDICATE SYSLOGINS CHANGE --
None.gif
     exec ( ' use master grant all to null ' )
None.gif
None.gif    
--  FINALIZATION: RETURN SUCCESS/FAILURE --
None.gif
     raiserror ( 15298 , - 1 , - 1 )
None.gif    
return   ( 0 )     --  sp_addlogin
None.gif

None.gif
GO

转载于:https://www.cnblogs.com/Hawk-Hong/archive/2006/12/22/599906.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值