Добрый день! Появилась задача удалить старый логин и создать новый. Но так как в таблицах Rigth остались записи старого логина и это обстоятельство не позволяет удалить логин. Как можно удалить логин или нужно сначало удалить запросом из всех таблиц записи по данному логину??? если так то есть ли какой уже заготовленный шаблон для этих целей?
Нравится
Иван, есть два варианта действий. Первый: скриптом удалить права во всех таблицах для пользователя, удалить этого пользователя, создать нового пользователя. И второй: создать нового пользователя, скриптом перенести права со старого пользователя на нового, удалить старого пользователя.
В первом случае скрипт будет примерно такой:
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
Возможно, этот пользователь заблокировал какой-то сервис (если он с правами администратора), либо у него остались связи в вышеперечисленных таблицах.
спасибо всем за помощь! оставлю я пока данный логин в системе.