USP_RECORDOPERATION_APPUSER_CONVERT_PROXYUSER
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@PROXYOWNERID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_RECORDOPERATION_APPUSER_CONVERT_PROXYUSER
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@PROXYOWNERID uniqueidentifier
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @CURRENTDATE datetime = getdate();
declare @ISPROXYUSER bit = 0;
declare @ISSYSADMIN bit = 0;
declare @DISPLAYNAME nvarchar(255);
select @DISPLAYNAME = DISPLAYNAME from dbo.APPUSER where ID = @ID;
select
@ISPROXYUSER = isnull(APPUSER.ISPROXYUSER, 0)
from dbo.APPUSER
where APPUSER.ID = @ID;
select @ISSYSADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@PROXYOWNERID)
if @ISPROXYUSER = 1
raiserror('BBERR_APPUSERALREADYCONVERTEDTOPROXYUSER', 13, 1);
--error raised when appuser to be converted is a proxy owner
if((select count(1) from dbo.APPUSER where PROXYOWNERID = @ID) > 0)
begin
raiserror('BBERR_APPUSERISPROXYOWNER', 13, 1);
return;
end
--error raised when appuser tries to convert themselves
if @ID = @PROXYOWNERID
begin
raiserror('BBERR_APPUSERCANNOTCONVERTTHEMSELVES', 13, 1);
return;
end
--To prevent the windows user to be converted to proxy user again
if exists(select CUSTOM_AUTHENTICATION_USERID from dbo.APPUSER where USERSID = suser_sid('NT AUTHORITY\ANONYMOUS LOGON') and DISPLAYNAME = @DISPLAYNAME and isnull(ISPROXYUSER, 0) = 1)
begin
raiserror('BBERR_APPUSERCANNOTBECONVERTEDAGAIN', 13, 1);
return;
end
--Check if the proxy owner is a system admin, if no then roles/permissions checking is performed and conversion happens
if @ISSYSADMIN = 0
begin
--A proxy user cannot have system roles permissions different from proxy owner.
--Check to see if this is the case, if yes throw an error.
declare @PROXYOWNERROLES table (SYSTEMROLEID uniqueidentifier)
insert into @PROXYOWNERROLES
select SYSTEMROLEID from SYSTEMROLEAPPUSER
where APPUSERID = @PROXYOWNERID and SYSTEMROLEID not in (select SYSTEMROLEID from SYSTEMROLEAPPUSER where APPUSERID = @ID);
--when system roles of proxyuser are same/subset of proxyowner, we will perform conversion
if((select count(1) from (select SYSTEMROLEID from SYSTEMROLEAPPUSER where APPUSERID = @ID
and SYSTEMROLEID not in (select SYSTEMROLEID from SYSTEMROLEAPPUSER where APPUSERID = @PROXYOWNERID)) AS PROXYUSERROLES) = 0)
begin try
update dbo.APPUSER
set
ISPROXYUSER = 1,
HASRUNASRIGHTS = 0,
PROXYOWNERID = @PROXYOWNERID,
CUSTOM_AUTHENTICATION_USERID = suser_sname([USERSID]),
USERSID = suser_sid('NT AUTHORITY\ANONYMOUS LOGON'),
EMAILADDRESS = NULL,
INVALIDLOGINATTEMPTS = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ID;
--Copy roles/permissions from PROXYOWNER
exec dbo.USP_DATAFORMTEMPLATE_EDIT_APPLICATIONUSERCOPYROLES @ID, @PROXYOWNERID, @CHANGEAGENTID;
delete from dbo.SYSTEMROLEAPPUSER
where SYSTEMROLEID in (select SYSTEMROLEID from @PROXYOWNERROLES)
and APPUSERID = @ID;
end try
begin catch
raiserror('BBERR_APPUSERNOTVERIFIEDFROMACTIVEDIRECTORY', 13, 1)
end catch
--when permissions of proxyuser are higher than proxyowner
else
begin
raiserror('BBERR_APPUSERCONVERTEDTOPROXYUSERHIGHERPERMISSIONS', 13, 1);
end
end
--Conversion without checking of roles/permissions when proxy owner is a system admin
else
begin try
update dbo.APPUSER
set
ISPROXYUSER = 1,
HASRUNASRIGHTS = 0,
PROXYOWNERID = @PROXYOWNERID,
CUSTOM_AUTHENTICATION_USERID = suser_sname([USERSID]),
USERSID = suser_sid('NT AUTHORITY\ANONYMOUS LOGON'),
EMAILADDRESS = NULL,
INVALIDLOGINATTEMPTS = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
where ID = @ID;
end try
begin catch
raiserror('BBERR_APPUSERNOTVERIFIEDFROMACTIVEDIRECTORY', 13, 1)
end catch
return 0;