Функция IS_MEMBER

Очень часто требуется написать хранимую процедуру или функцию, которая будет выдавать разные результаты для разных групп пользователей. Например, директор предприятия хочет видеть информацию по всем сотрудникам его фирмы, а начальники отделов только по своим сотрудникам. Реализовать это можно, например, включив пользователей в разные группы AD, а в запросе проверять вхождение и в зависимости от результата выдавать разные данные. В SQL Server существует функция IS_MEMBER способная осуществлять вышеуказанную проверку, причем она работает даже с вложенными группами. Функция принимает единственный параметр – название AD группы и возвращает 1, если текущий пользователь входит в указанную группу; 0 – если не входит и NULL, если такой группы в AD не найдено. Естественно, пользователи должны использовать Windows аутентификацию, чтобы воспользоваться этим функционалом. И привожу пример, как может выглядеть в хранимой процедуре вывод результатов в зависимости от вхождения в группу.

IF IS_MEMBER('TEST\CEO')
	SELECT [FirstName], [LastName], [Department], [Salary]
	FROM [HumanResources].[Employee]
ELSE IF IS_MEMBER('TEST\DepartmentHead')
	SELECT [FirstName], [LastName], [Department], [Salary]
	FROM [HumanResources].[Employee]
	WHERE [Department] = (SELECT [Department] FROM [HumanResources].[Employee] WHERE [LoginName] = SUSER_SNAME())
ELSE
	SELECT [FirstName], [LastName], [Department], [Salary]
	FROM [HumanResources].[Employee]
	WHERE [LoginName] = SUSER_SNAME()

Leave a Reply

Your email address will not be published. Required fields are marked *