Для заведения в КИС нового пользователя нужно в SQL-сервере запустить этот скрипт, и перед выполнением внести информацию с регистрационной карты пользователя
в этот скрипт. ВНИМАНИЕ: Полностью копируем скрипт и вставляем в запрос, вместе со всеми комментариями.
Смотрим данные в регистрационной карте, вставляем в скрипт, придумываем пароль для пользователя, вносим в скрипт и запускаем его.
declare @dname varchar(80) -- имя домена
declare @nuser varchar(80) -- учетка пользователя
declare @basename varchar(50)
declare @idnew int, @idfrom int
declare @sql_idnew int, @sql_idfrom int
declare @sql nvarchar(max)
declare @user_name varchar(80)
declare @userfrom varchar(80)
declare @name_role varchar(80)
declare @login varchar(80)
declare @pass varchar(80)
declare @email varchar(80)
declare @epass varchar(80)
--НАЧАЛО ДАННЫХ, КОТОРЫЕ ПОДСТАВЛЯЮТСЯ ДЛЯ НОВОГО ПОЛЬЗОВАТЕЛЯ:
set @dname = 'ARKONA'
set @user_name = 'TopaevaDA' -- имя пользователя
set @basename = 'Real' --- база
set @nuser = 'Топаева' --- фамилия кого заводим
set @userfrom = 'Бондарук' --- с кого будем права срисовывать
set @login = 'TopaevaDA' -- логин для КиС
set @pass = 'TopaevaDA421' -- пароль для КиС
set @email = 'topaevada@arkona36.ru' -- почта
set @epass = 'SuRPM57' -- пароль почты
--КОНЕЦ ДАННЫХ, КОТОРЫЕ ПОДСТАВЛЯЛИ.
set @user_name =@dname + '\' +@user_name
select @user_name
/***** создание учетки ***********/
USE [master]
if suser_id(@user_name) is not null
begin
set @sql = N'DROP LOGIN [' + @user_name + N']'
exec sp_executesql @sql
end
set @sql = N'CREATE LOGIN [' + @user_name + N'] FROM WINDOWS WITH DEFAULT_DATABASE=[' + @basename + N'], DEFAULT_LANGUAGE=[us_english]'
select @sql
exec sp_executesql @sql
/***** создание учетки в базе ***********/
USE [Real]
set @sql = N'DROP USER IF EXISTS [' + @user_name + N']'
select @sql
exec sp_executesql @sql
set @sql = N'CREATE USER [' + @user_name + N'] FOR LOGIN [' + @user_name + N']'
select @sql
exec sp_executesql @sql
set @sql = N'ALTER USER [' + @user_name + N'] WITH DEFAULT_SCHEMA=[arkona]'
select @sql
exec sp_executesql @sql
/******** проверим наличие в spr_kontr *****/
set @idnew = (select top 1 id_kontr from spr_kontr (nolock) where n_kontr like @nuser + '%' and employer = 1 and id_cond = 10 order by id_kontr desc)
select @idnew
set @idfrom = (select id_kontr from spr_kontr (nolock) where n_kontr like @userfrom + '%' and employer = 1)
select @idfrom
set @sql_idfrom = ( SELECT sql_id FROM spr_kontr (nolock) where id_kontr= @idfrom)
select @sql_idfrom
if @idnew > 0
begin
/***** соответствие с базой ***********/
update spr_kontr
set sql_id = user_id(@user_name)
where id_kontr = @idnew
IF Not EXISTS (SELECT * FROM sLoginUser with (nolock) WHERE idUser = @idnew)
begin
insert into sLoginUser
select @idnew,@login,@pass
from v_today
end
/***** роли в кис ***********/
IF EXISTS (SELECT * FROM rRoleUser with (nolock) WHERE IdKontr = @idnew)
begin
delete from rRoleUser where IdKontr = @idnew
end
insert into rRoleUser
select @idnew,idrole
FROM rRoleUser with (nolock)
where rRoleUser.IdKontr = @idfrom
/***** копирование ролей *****/
declare ruser cursor for
select dp.name
from sys.database_role_members (nolock)
inner join sys.database_principals (nolock) dp
on sys.database_role_members.role_principal_id = dp.principal_id
where sys.database_role_members.member_principal_id = @sql_idfrom
open ruser
fetch next from ruser
into @name_role
while @@FETCH_STATUS = 0
begin
exec sp_addrolemember @name_role ,@user_name
fetch next from ruser
into @name_role
end
close ruser
deallocate ruser
/**/
IF EXISTS (SELECT * FROM sContactPersonal with (nolock) WHERE idUser = @idnew)
begin
delete from sContactPersonal where idUser = @idnew
end
insert into sContactPersonal
select @idnew,1, @email,'',@epass
from v_today
IF EXISTS (SELECT * FROM rkontrterritory with (nolock) WHERE id_kontr = @idnew)
begin
delete from rkontrterritory WHERE id_kontr = @idnew
end
IF EXISTS (SELECT * FROM rUserTerr with (nolock) WHERE idkontr = @idnew)
begin
delete from rUserTerr WHERE idkontr = @idnew
end
end