Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
aleks2
Guest |
Что-то странно: 1. Включаю через SSMS пользователя в роль, а select IS_ROLEMEMBER('ETL', 'Aleks') возвращает 0. 2. Для других пользователей из роли (включены туда давно - т.е. месяц или более назад) select IS_ROLEMEMBER('ETL', 'Alekstest') возвращает 1. 3. Чо за бред? |
14 дек 16, 14:46 [20002687] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Ладно, как только сформулируешь - ответ и найдется. Если IS_SRVROLEMEMBER('sysadmin') = 1, то IS_ROLEMEMBER('ETL') = 0. Всегда. Для любой роли базы данных. http://stackoverflow.com/questions/19924072/is-rolemember-erroneously-returns-0-for-database-role-members Загадочно... |
14 дек 16, 14:55 [20002778] Ответить | Цитировать Сообщить модератору |
daw Member Откуда: Муром -> Москва Сообщений: 7381 |
так, члены роли sysadmin в базы всегда мапились на юзера dbo. даже если явно маппинг на другого юзера настроен. |
||
14 дек 16, 15:16 [20002912] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
вот именно. по ссылке написана фигня, IS_ROLEMEMBER покажет 1 не когда логин будет выкинут из всех серверных ролей, а как только перестанет быть сисадмином. так что дело именно в юзере: когда в базе сисадмин выполняет select user, получает dbo. и для него же и проверяется IS_ROLEMEMBER. а засунуть dbo в роль не выйдет |
14 дек 16, 15:27 [20003006] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Умные вы мои, разумные. (я, правда, ничо из твоей тирады не понял) Я ж его прямо спрашиваю IS_ROLEMEMBER('ETL', 'Aleks') Да, 'Aleks' - сисадмин. Но... |
||
14 дек 16, 16:13 [20003329] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
зря не понял. еще раз объясняю, а дальше перечитывай, если сам не допер, больше двух раз жирно будет рассказывать. ты канешна можешь запросить IS_ROLEMEMBER, используя второй параметр, но получишь все равно все то же, как если бы запросил от имени этого второго параметра. ты в студии когда-нибудь пытался в свойствах юзера прочесть, на что у него есть права (Effective Permissions)? ты попытайся, со включенным профайлером. увидишь, что он имперсонэйтит запрашиваемого пользователя (его login) и делает от его имени select * from sys.fn_my_permissions (если попытаешья это сделать в свойствах юзера-виндовой группы, получись заодно ошибку о невозможности имперсонэйтить логин-виндовую группу (см. картинку) вроде опрашивал юзера, а получил ошибку для имперсонэйта логина) он не шарит по таблицам в поисках упомянутого юзера. и понятно, почему. если юзер виндовый, он может в кучу групп входить, поэтому бесполезно искать на самого юзера: он может не иметь явных прав, все получать через группы. с IS_ROLEMEMBER все то же самое. ты в роль мог пихануть виндовую группу, а не явную учетку. поэтому вместо поиска по имени юзера, соответствующий логин имперсонэйтится. вот и угадай, что будет, если имперсонэйтить сисадмина. соответствующий ему юзер будет dbo, а не то, что ты вторым параметром передал К сообщению приложен файл. Размер - 41Kb |
||||
14 дек 16, 17:42 [20003765] Ответить | Цитировать Сообщить модератору |
daw Member Откуда: Муром -> Москва Сообщений: 7381 |
o-o, ну, нехило бы в документации что-то упомянуть о таком особом статусе sysadmin-ов для этой функции. не все ж такие продвинутые. |
14 дек 16, 18:10 [20003928] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
|
||||
14 дек 16, 18:11 [20003936] Ответить | Цитировать Сообщить модератору |
daw Member Откуда: Муром -> Москва Сообщений: 7381 |
это я видел. во-первых, он немного другое поведение описал, во вторых, в доку это так и не внесли. вместо этого "пофиксили", видимо. |
||||||
14 дек 16, 18:16 [20003952] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |