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


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.