Добрый день! Появилась задача удалить старый логин и создать новый. Но так как в таблицах Rigth остались записи старого логина и это обстоятельство не позволяет удалить логин. Как можно удалить логин или нужно сначало удалить запросом из всех таблиц записи по данному логину??? если так то есть ли какой уже заготовленный шаблон для этих целей?

Нравится

8 комментариев

Иван, есть два варианта действий. Первый: скриптом удалить права во всех таблицах для пользователя, удалить этого пользователя, создать нового пользователя. И второй: создать нового пользователя, скриптом перенести права со старого пользователя на нового, удалить старого пользователя.

В первом случае скрипт будет примерно такой:

declare      @Table sysname,
               @AdminUnitID nvarchar(38) 
 
  declare c_TableRight cursor for
    select name from sysobjects
    where type = 'U'
	and name like '%Right'
 
  set @AdminUnitID = '<ID старого пользователя>'
 
  open c_TableRight
 
  while 1 = 1
  begin
 
     fetch c_TableRight 
     into @Table
 
     if @@fetch_status = -1 break 
     if @@fetch_status = -2 continue
 
     print @Table 
 
     exec ('delete from ' + @Table + '
     where AdminUnitID = ''' + @AdminUnitID + '''')
 
  end
 
  close c_TableRight
  deallocate c_TableRight

Во втором же такой:

declare      @Table sysname,
               @AdminUnitIDOld nvarchar(38),
               @AdminUnitIDNew nvarchar(38) 
 
  declare c_TableRight cursor for
    select name from sysobjects
    where type = 'U'
	and name like '%Right'
 
  set @AdminUnitIDOld = '<ID старого пользователя>'
  set @AdminUnitIDNew = '<ID нового пользователя>'
 
  open c_TableRight
 
  while 1 = 1
  begin
 
     fetch c_TableRight 
     into @Table
 
     if @@fetch_status = -1 break 
     if @@fetch_status = -2 continue
 
     print @Table 
 
     exec('update ' + @Table + '
     set AdminUnitID = ''' + @AdminUnitIDNew + '''
     where AdminUnitID = ''' + @AdminUnitIDOld + '''')
 
  end
 
  close c_TableRight
  deallocate c_TableRight

Ну а для профилактики можно использовать права доступа исключительно с использованием групп. Достаточно нового пользователя включить в нужные группы.

Спасибо за помощь. А еще же есть записи в таблицах где в поле ответственный стоит данный логин. А если я просто сделаю его неактивным и в менеджере лицензий удалю у него продукт, создам нового пользователя и запрошу лицензию на нового пользователя. Такой вариант думаю должен получиться?

"Мещеринов Иван Александрович" написал:А еще же есть записи в таблицах где в поле ответственный стоит данный логин

Ответственный = Контакт, его же удалять не будете или менять? С контактом проще - его можно переименовать просто из Петрова в Васечкина и уже на его основе создавать нового пользователя, далее см. скрипт выше по копированию прав. Либо оставить ответственного как есть.

Выполнил скрипт написанный Олегом но что то еще мешает удалить логин???

Я вообще не рекомендую удалять логин. Зачем? Вы теряете историю работы в системе. Вы можете просто отключить данного пользователя в системе и все. Но если уж сильно хочется, то выполните:

delete from tbl_AdminUnit where Name = 'login'

в sql menagment studio и посмотреть на какие еще таблицы остались ссылки.

"Мещеринов Иван Александрович" написал:А если я просто сделаю его неактивным и в менеджере лицензий удалю у него продукт, создам нового пользователя и запрошу лицензию на нового пользователя. Такой вариант думаю должен получиться?

Да, такой вариант должен получиться.

Что касается проблемы удаления логина, вот список связей таблицы tbl_AdminUnit с другими таблицами (кроме таблиц прав):

1) с tbl_AdminUnit по полю GroupParentID
2) с tbl_AdminUnitLicenseProduct по полю AdminUnitID
3) с tbl_License по полю UserID
4) с tbl_PlanningDataRightsDef по полю AdminUnitID
5) с tbl_ProfileData по полю UserID
6) с tbl_Service по полю LockedByUserID
7) с tbl_TableGroup по полю AdminUnitID
8) с tbl_UserInGroup по полю GroupID
9) с tbl_UserInGroup по полю UserID
10) с tbl_UserLicenseProduct по полю UserID

Возможно, этот пользователь заблокировал какой-то сервис (если он с правами администратора), либо у него остались связи в вышеперечисленных таблицах.

спасибо всем за помощь! оставлю я пока данный логин в системе.

Показать все комментарии