Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как быстро IS_ROLEMEMBER отражает изменение членства в роли  [new]
aleks2
Guest
Что-то странно:

1. Включаю через SSMS пользователя в роль, а

select IS_ROLEMEMBER('ETL', 'Aleks')

возвращает 0.

2. Для других пользователей из роли (включены туда давно - т.е. месяц или более назад)

select IS_ROLEMEMBER('ETL', 'Alekstest')

возвращает 1.

3. Чо за бред?
14 дек 16, 14:46    [20002687]     Ответить | Цитировать Сообщить модератору
 Re: как быстро IS_ROLEMEMBER отражает изменение членства в роли  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: как быстро IS_ROLEMEMBER отражает изменение членства в роли  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
aleks2
Ладно, как только сформулируешь - ответ и найдется.

Если IS_SRVROLEMEMBER('sysadmin') = 1, то IS_ROLEMEMBER('ETL') = 0. Всегда. Для любой роли базы данных.

http://stackoverflow.com/questions/19924072/is-rolemember-erroneously-returns-0-for-database-role-members

Загадочно...


так, члены роли sysadmin в базы всегда мапились на юзера dbo. даже если явно маппинг на другого юзера настроен.
14 дек 16, 15:16    [20002912]     Ответить | Цитировать Сообщить модератору
 Re: как быстро IS_ROLEMEMBER отражает изменение членства в роли  [new]
o-o
Guest
вот именно.
по ссылке написана фигня, IS_ROLEMEMBER покажет 1 не когда логин будет выкинут из всех серверных ролей,
а как только перестанет быть сисадмином.
так что дело именно в юзере: когда в базе сисадмин выполняет select user, получает dbo.
и для него же и проверяется IS_ROLEMEMBER.
а засунуть dbo в роль не выйдет
14 дек 16, 15:27    [20003006]     Ответить | Цитировать Сообщить модератору
 Re: как быстро IS_ROLEMEMBER отражает изменение членства в роли  [new]
aleks2
Guest
o-o
вот именно.
по ссылке написана фигня, IS_ROLEMEMBER покажет 1 не когда логин будет выкинут из всех серверных ролей,
а как только перестанет быть сисадмином.
так что дело именно в юзере: когда в базе сисадмин выполняет select user, получает dbo.
и для него же и проверяется IS_ROLEMEMBER.
а засунуть dbo в роль не выйдет


Умные вы мои, разумные. (я, правда, ничо из твоей тирады не понял)

Я ж его прямо спрашиваю
IS_ROLEMEMBER('ETL', 'Aleks')


Да, 'Aleks' - сисадмин. Но...
14 дек 16, 16:13    [20003329]     Ответить | Цитировать Сообщить модератору
 Re: как быстро IS_ROLEMEMBER отражает изменение членства в роли  [new]
o-o
Guest
aleks2
o-o
вот именно.
по ссылке написана фигня, IS_ROLEMEMBER покажет 1 не когда логин будет выкинут из всех серверных ролей,
а как только перестанет быть сисадмином.
так что дело именно в юзере: когда в базе сисадмин выполняет select user, получает dbo.
и для него же и проверяется IS_ROLEMEMBER.
а засунуть dbo в роль не выйдет


Умные вы мои, разумные. (я, правда, ничо из твоей тирады не понял)

Я ж его прямо спрашиваю
IS_ROLEMEMBER('ETL', 'Aleks')


Да, 'Aleks' - сисадмин. Но...

зря не понял.
еще раз объясняю, а дальше перечитывай, если сам не допер, больше двух раз жирно будет рассказывать.
ты канешна можешь запросить IS_ROLEMEMBER, используя второй параметр,
но получишь все равно все то же, как если бы запросил от имени этого второго параметра.

ты в студии когда-нибудь пытался в свойствах юзера прочесть, на что у него есть права (Effective Permissions)?
ты попытайся, со включенным профайлером.
увидишь, что он имперсонэйтит запрашиваемого пользователя (его login)
и делает от его имени select * from sys.fn_my_permissions
(если попытаешья это сделать в свойствах юзера-виндовой группы,
получись заодно ошибку о невозможности имперсонэйтить логин-виндовую группу (см. картинку)
вроде опрашивал юзера, а получил ошибку для имперсонэйта логина)
он не шарит по таблицам в поисках упомянутого юзера.
и понятно, почему.
если юзер виндовый, он может в кучу групп входить,
поэтому бесполезно искать на самого юзера: он может не иметь явных прав, все получать через группы.

с IS_ROLEMEMBER все то же самое.
ты в роль мог пихануть виндовую группу, а не явную учетку.
поэтому вместо поиска по имени юзера, соответствующий логин имперсонэйтится.
вот и угадай, что будет, если имперсонэйтить сисадмина.
соответствующий ему юзер будет dbo, а не то, что ты вторым параметром передал

К сообщению приложен файл. Размер - 41Kb
14 дек 16, 17:42    [20003765]     Ответить | Цитировать Сообщить модератору
 Re: как быстро IS_ROLEMEMBER отражает изменение членства в роли  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
o-o,

ну, нехило бы в документации что-то упомянуть о таком особом статусе sysadmin-ов для этой функции.
не все ж такие продвинутые.
14 дек 16, 18:10    [20003928]     Ответить | Цитировать Сообщить модератору
 Re: как быстро IS_ROLEMEMBER отражает изменение членства в роли  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
daw
o-o,

ну, нехило бы в документации что-то упомянуть о таком особом статусе sysadmin-ов для этой функции.
не все ж такие продвинутые.

автор
There is an important piece of information missing from this article. If the current user is a member of the "sysadmin" fixed server role, and you use the optional database_principal parameter, you will get an "Invalid group / role specified" error unless you specify "dbo" as the database_principal. This is because internally, any member of the sysadmin role is mapped to the "dbo" user at the database level.
14 дек 16, 18:11    [20003936]     Ответить | Цитировать Сообщить модератору
 Re: как быстро IS_ROLEMEMBER отражает изменение членства в роли  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
TaPaK
daw
o-o,

ну, нехило бы в документации что-то упомянуть о таком особом статусе sysadmin-ов для этой функции.
не все ж такие продвинутые.

автор
There is an important piece of information missing from this article. If the current user is a member of the "sysadmin" fixed server role, and you use the optional database_principal parameter, you will get an "Invalid group / role specified" error unless you specify "dbo" as the database_principal. This is because internally, any member of the sysadmin role is mapped to the "dbo" user at the database level.


это я видел. во-первых, он немного другое поведение описал, во вторых, в доку это так и не внесли. вместо этого "пофиксили", видимо.
14 дек 16, 18:16    [20003952]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить