Какая разница между 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.