Какая разница между EXECUTE AS USER и EXECUTE AS LOGIN, которая заставляет второго вести себя неожиданно?


10

Недавно я использовал EXECUTE AS LOGIN, чтобы проверить, может ли определенный человек использовать табличную функцию в одной из наших баз данных. Испытания показали, что он мог, но он неоднократно сообщал о неудаче.

Пользователь использует логин «WEB» для подключения к базе данных, и у него есть пользователь «WEB» в этой базе данных, связанный с логином «WEB», поэтому я попробовал следующие сценарии:

-- part 1
EXECUTE AS USER = 'WEB'
GO
SELECT 
    USER_NAME() AS 'user_name'
    ,SUSER_NAME() AS 'suser_name'
    ,SUSER_SNAME() AS 'suser_sname'
    ,SYSTEM_USER AS 'system_user'
GO
REVERT
GO

и

-- part 2
EXECUTE AS LOGIN = 'WEB'
GO
SELECT 
    USER_NAME() AS 'user_name'
    ,SUSER_NAME() AS 'suser_name'
    ,SUSER_SNAME() AS 'suser_sname'
    ,SYSTEM_USER AS 'system_user'
GO
REVERT
GO

Первая часть была в порядке с результатом:

WEB | WEB | WEB | WEB

Но второй результат был немного запутанным:

дбо | WEB | WEB | WEB

Какая разница между EXECUTE AS USER и EXECUTE AS LOGIN, которая приводит к сбою второго? Кроме того, конечно, первый - это уровень базы данных, а второй - олицетворение на уровне сервера, о чем я знаю и не объясняю ситуацию здесь.


Второй не «провал», он просто говорит вам, что для входа в систему назначена роль сервера (sysadmin). Вы проверили схемы, запрашиваемые пользователем? Если бы до этого схема dbo по умолчанию была не той, которую ожидали разработчики. Лучше исправить в коде, полностью ссылаясь на таблицу
Стюарт Мур

Ответы:


7

Член sysadminгруппы всегда отображается dbo, даже если у него есть явный пользователь в базе данных. Таким образом, похоже, что логин WEBявляется членом sysadmin, следовательно, USER_NAME()правильно возвращается dboво втором случае.


Проверено и подтверждено. Это был действительно член сисадмина. Оказалось, что этот отчет дошел до одного из других разработчиков, и вместо правильного решения он просто назначил роль входа в систему сисадмина. Я бы даже не подумал об этом, я действительно разочарован. Мы собираемся поговорить серьезно, когда он вернется. Узнал что-то новое сегодня, спасибо.
Gemisigo

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

Если приложение repor имеет разрешение IMPERSONATE WEBи WEBудалено, sysadminто дверь закрывается. Но стоит проверить, тем не менее.
Ремус Русану

Да, нам придется еще раз проверить все, что влияет на права, чтобы увидеть, были ли другие проблемы «исправлены» таким образом. Не очень счастлив сейчас :( Еще раз спасибо, Ремус.
Gemisigo
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.