Яка різниця між ВИКОРИСТАННЯМ ТА КОРИСТУВАЧОМ ТА ВИКОРИСТАННЯ ЯК ВХІД, що змушує другу поводитися несподівано?


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

Яка різниця між ВИКОНАННЯМ ТА КОРИСТУВАЧОМ ТА ВИКОРИСТАННЯ ЯК ВХОД, що робить другий невдалим? Крім того, звичайно, перший - рівень бази даних, а другий - імперсонація на рівні сервера, про що я знаю і не пояснює ситуацію тут.


Другий не "провалюється", він просто говорить вам, що для входу в систему призначена роль сервера (sysadmin). Ви перевірили схеми, які запитуються користувачем? Якби раніше, де схема за замовчуванням dbo не та, якою розраховували розробники. Краще зафіксуйте в коді, повністю посилаючись на таблицю
Стюарт Мур

Відповіді:


7

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


Перевірено і підтверджено. Він справді був членом sysadmin. Виявилося, що цей звіт дійшов до одного з інших розробників, і замість правильного рішення він просто призначив роль sysadmin для входу. Я б навіть не думав про те, що відбувається, я справді розчарований. Ми поговоримо серйозно, коли він повернеться. Сьогодні дізналися щось нове, дякую.
gemisigo

Це також означає, що у вашій заяві (доповіді?) Представлено особистий дозвіл члена системи sysadmin. Подивіться, як саме в ієрархії дозволів це надано. Ймовірно, що навіть зараз звіт може, за бажанням, видати себе за іншого sysadminчлена, тому заява про звітність є фактично систематичною системою. Тобто ia можливе підвищення рівня привілеїв, що атакує вектор, ним може скористатися хакер або, швидше за все, ваш персонал.
Рем Русану

Якщо додаток для звітів увімкнено дозвіл IMPERSONATE WEBі WEBйого зняли, sysadminтоді двері закриваються. Але варто все-таки перевірити.
Рем Русану

Так, нам доведеться ще раз перевірити все, що впливає на права, щоб побачити, чи існували інші проблеми, «виправлені» таким чином. Не дуже щасливий зараз :( Ще раз дякую, Рем.
gemisigo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.