-- NOTE: FOR INTERNAL SECURITY USE ONLY!
-- DO NOT DOCUMENT OR USE!
create procedure sys.sp_MSadduser_implicit_ntlogin
@ntname sysname
AS
declare @ret int
-- NO-OP IF LOGIN ALREADY EXISTS
if database_principal_id(@ntname) is null
begin
-- MUST BE NT NAME
if (charindex('\', @ntname) = 0)
return (1)
declare @newsid varbinary(85),
@isgrp bit
-- OBTAIN NT SID FOR THIS USER (SET STATUS BITS)
select @newsid = get_sid('\U'+@ntname) -- NT user
if (@newsid is Null)
begin
select @isgrp = 1, @newsid = get_sid('\G'+@ntname) -- NT group
IF (@newsid IS Null)
return (1)
end
else
select @isgrp = 0 -- NTUser
-- FAIL IF SID ALREADY IN SYSUSERS
if exists (select sid from sysusers where sid = @newsid)
return (1)
BEGIN TRANSACTION
-- ADD IMPLICIT SYSUSERS ENTRY & INVALIDATE UID CACHE FOR THIS DB
EXEC %%Owner().NewUserOrGroup(Name = @ntname, SID = @newsid,
IsExternal = 1, IsGroup = @isgrp)
-- RETURN FAILURE/SUCCESS
select @ret = @@error
if @ret <> 0
begin
COMMIT TRANSACTION
return @ret
end
COMMIT TRANSACTION
end
-- SUCCESS
return (0) -- sp_MSadduser_implicit_ntlogin