Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как узнать принадлежность юзера к определенной роли? (NT авторизация)  [new]
SergDanceHits
Member

Откуда: Russia, Vladivostok
Сообщений: 157
Имеем NT авторизацию, доступ разрулен на уровне ролей. А как узнать, принадлежит ли юзер к пределенной роли?
Например

User1 - NT группа = SQL_User
User2 - NT группа = SQL_User
...
UserN - NT группа = SQL_User
--------------------------------------------

Manager1 - NT группа = SQL_Manager
Manager2 - NT группа = SQL_Manager
...
ManagerN - NT группа = SQL_Manager
--------------------------------------------

SQL_User установлена роль User
SQL_Manager установлена роль Manager

Как узнать, что User1 принадлежит роли User, а Manager2 - роли Manager?
30 июл 03, 05:46    [280797]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать принадлежность юзера к определенной роли? (NT авторизация)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
BOL: sp_helprolemember
30 июл 03, 06:24    [280807]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать принадлежность юзера к определенной роли? (NT авторизация)  [new]
SergDanceHits
Member

Откуда: Russia, Vladivostok
Сообщений: 157
BOL: sp_helprolemember

Returns information about the members of a role in the current database.

это не то. юзером здесь и не пахнет.

sp_helprolemember выдает:
 

DbRole MemberName MemberSID
-----------------------------------------------

User SQL_User ..............
Manager SQL_Manager ..............



А мне надо связку юзера и роли, типа RoleUserExists('User', 'User1') = 0 или 1.
Даже, так - RoleUserExists('User', user_name())
30 июл 03, 06:56    [280814]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать принадлежность юзера к определенной роли? (NT авторизация)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А повнимательней посмотреть статью, особенно ссылки в конце (например, sp_helpuser)?
30 июл 03, 07:10    [280817]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать принадлежность юзера к определенной роли? (NT авторизация)  [new]
SergDanceHits
Member

Откуда: Russia, Vladivostok
Сообщений: 157
блин, ну не могу врубиться...

declare @user varchar(50) set @user = user_name()
exec sp_helpuser @user


Server: Msg 15198, Level 16, State 1, Procedure sp_helpuser, Line 189
The name supplied (MyDomain\User1) is not a user, role, or aliased login.


может я не так объясняю? у меня на SQL серваке доступ стоит NT авторизация, причем в домене все юзера (User1..UserN) состоят в группе SQL_User. В SQL серваке в security\logins стоят именно группы а не реальные юзера, т.е. не MyDomain\User1, а MyDomain\SQL_User. а логинам, т.е. NT группам (MyDomain\SQL_User) уже назначены роли, такие, как User, Manager, Buhgalter и т.д...

Так вот, связь NT группы и роли очевидна, sp_helprolemember, sp_helpuser ее и демонстрируют, а мне настоящий юзер нужен, user_name(). он то возвращает 'MyDomain\User1'.

Если интересна конечная цель, могу сказать. есть таблица, в ней поле UserCreate, в которое пишется, кто создал запись. так вот надо, чтобы исправлять запись мог только этот человек, и никто другой. с этим все понятно :
...

where UserCreate = user_name()

но есть еще группа людей, которая имеет право править любые записи, независимо от владельца. Причем они совсем не 'dbo'. вот эта группа у меня запихана в отдельную роль, ну и в NT они тоже, в принципе, запиханы в одну группу. Вот и вопрос сам собой назревает - как им подтвердить свое право править любые записи, не только свои?
30 июл 03, 08:17    [280847]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать принадлежность юзера к определенной роли? (NT авторизация)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Да зачем всё это? Просто даешь соответствующие разрешения на объекты для каких нужно ролей, а сервер дальше сам разберется (особенно на процедуры и вьювы). Если же надо какие то записи позволить редактировать только определенному юзеру, то используя SUSER_SNAME или SUSER_NAME разруливай это в процедурах или в триггерах.
30 июл 03, 08:56    [280872]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать принадлежность юзера к определенной роли? (NT авторизация)  [new]
SergDanceHits
Member

Откуда: Russia, Vladivostok
Сообщений: 157
ну правильно, я и пытаюсь это сделать в тригере, чтоб юзеру давал отлуп на чужие записи. но есть еще продвинутые юзвери, которым можно все записи править, их не один, и не два человека. много их. мне их что, каждого проверять? не, ну я могу конечно сделать типа такого:
CREATE FUNCTION PowerUsers 

RETURNS int AS
BEGIN
declare @res int
if user_name = 'MyDomain\PowerUser1'
or user_name = 'MyDomain\PowerUser2'
...
or user_name = 'MyDomain\PowerUserN'
set @res = 1
return @res
END

а в тригере проверяться
if dbo.PowerUsers <> 1 begin

...
RaisError (@msg_str, 15, 1) with noWait
return
end

но как то коряво это, очень коряво. А если юзер уволился с работы, у него понизилась роль (к примеру с главбух до просто бух), доменное имя сменилось, новый юзер пришел на работу? глюк. поэтому и пытаюсь через роли, ну или через логины (которые являются NT группами) сделать.да вот не выходит
30 июл 03, 09:18    [280890]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать принадлежность юзера к определенной роли? (NT авторизация)  [new]
SergDanceHits
Member

Откуда: Russia, Vladivostok
Сообщений: 157
чуть подправил
CREATE FUNCTION PowerUsers 

RETURNS int AS
BEGIN
declare @user varchar(50) set @user = user_name()
declare @res int set @res = 0
if @user = 'MyDomain\PowerUser1'
or @user = 'MyDomain\PowerUser2'
...
or @user = 'MyDomain\PowerUserN'
set @res = 1
return @res
END
30 июл 03, 09:21    [280895]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать принадлежность юзера к определенной роли? (NT авторизация)  [new]
Белов Владимир
Member

Откуда: Москва
Сообщений: 1716
Посмотри в сторону
IS_MEMEBER
IS_SRVMEMBER
30 июл 03, 09:24    [280900]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать принадлежность юзера к определенной роли? (NT авторизация)  [new]
SergDanceHits
Member

Откуда: Russia, Vladivostok
Сообщений: 157
наконец то !!! а то я уже полез в ActiveDirectory из T-SQL...

ответ -
select IS_MEMBER('PowerUser')

или
select IS_MEMBER('SQL_PowerUser')

PowerUser-ам возвращает 1, просто User-ам - 0

спасибо Белову Владимиру
30 июл 03, 09:49    [280933]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить