С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/29: Рейтинг темы: голосов - 29, средняя оценка - 4.93
1047 / 531 / 66
Регистрация: 16.01.2013
Сообщений: 4,093
1

Можно ли сделать запрос, который будет выводить разную информацию в зависимости от пользователя которые используют sql server?

05.02.2013, 17:07. Показов 5572. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Можно сделать запрос который будет выводить разную информацию в зависимости от пользователя которые используют sql server?
на пример
пользователь manager, запрос выводит все по фильтру manager
пользователь manager28, запрос выводит все по фильтру manager28
это нужно чтобы интерфейс не делать под конкретного пользователя.

хочу сделать запрос который будет для всех один но в зависимости от имени входа в windows (логина sql server) меняется запрос. иначе мне придется каждому пользователю, а их 30 делать из за этого от дельно запросы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.02.2013, 17:07
Ответы с готовыми решениями:

Можно ли сделать бота который будет проверять данные пользователя?
Можно ли с PHP сделать бота который будет проверять данные пользователя, которые можно посмотреть...

Запустить другой пакетный файл, который будет выводить информацию о файлах в корне диска C:
Помогите решить задачу 8. Разработать пакетный файл для запуска другого пакетного файла,...

Где можно найти информацию по разработке приложений на asp, которые используют технологии XML & XSLT?
Здравствуйте, уважаемые. Подскажите, пожайлуста, где можно найти информацию по разработке...

Написать запрос, который будет выводить только имена состоящие из 4 букв
Имеем таблицу с именами и фамилиями. Есть пару строк, где имен не указано, только фамилии. Кто...

22
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
05.02.2013, 17:38 2
T-SQL
1
select SUSER_NAME()
1
Эксперт MS Access
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
05.02.2013, 17:41 3
А чем не подходит функция CURRENT_USER?
1
1047 / 531 / 66
Регистрация: 16.01.2013
Сообщений: 4,093
06.02.2013, 10:29  [ТС] 4
можно ссылку на примеры или где можно почитать?
0
1047 / 531 / 66
Регистрация: 16.01.2013
Сообщений: 4,093
06.02.2013, 10:29  [ТС] 5
можно ссылку на примеры или почитать где можно?
0
Эксперт MS Access
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
06.02.2013, 10:34 6
Майкрософт msdn, например. Там описаны и разбираются CURRENT_USER, SYSTEM_USER, SUSER_NAME, ... .
0
1047 / 531 / 66
Регистрация: 16.01.2013
Сообщений: 4,093
06.02.2013, 11:02  [ТС] 7
как сюда можно вставить код "select SUSER_NAME()" чтобы проверял sql server под "manager4" зашел в пользователь или "manager5" и вставлял соотведсвующий параметр для запроса
T-SQL
1
2
3
4
SELECT firma.kodFirm, firma.nameFirm, firma.abbr, firma.sfera, firma.region, firma.nomDog, firma.dataDog, firma.kontract, firma.FIO, firma.doljnost, firma.tel, firma.adres, firma.sait, firma.EMail, firma.proces, firma.DataKontacta, firma.ОКомпании
FROM firma
WHERE (((firma.kodManager)="manager4"))
GROUP BY firma.kodFirm, firma.nameFirm, firma.abbr, firma.sfera, firma.region, firma.nomDog, firma.dataDog, firma.kontract, firma.FIO, firma.doljnost, firma.tel, firma.adres, firma.sait, firma.EMail, firma.proces, firma.DataKontacta, firma.ОКомпании;
0
107 / 107 / 5
Регистрация: 28.12.2012
Сообщений: 207
06.02.2013, 13:24 8
T-SQL
1
2
3
4
SELECT firma.kodFirm, firma.nameFirm, firma.abbr, firma.sfera, firma.region, firma.nomDog, firma.dataDog, firma.kontract, firma.FIO, firma.doljnost, firma.tel, firma.adres, firma.sait, firma.EMail, firma.proces, firma.DataKontacta, firma.ОКомпании
FROM firma
WHERE firma.kodManager = (SELECT SUSER_NAME())
GROUP BY firma.kodFirm, firma.nameFirm, firma.abbr, firma.sfera, firma.region, firma.nomDog, firma.dataDog, firma.kontract, firma.FIO, firma.doljnost, firma.tel, firma.adres, firma.sait, firma.EMail, firma.proces, firma.DataKontacta, firma.ОКомпании;
0
1047 / 531 / 66
Регистрация: 16.01.2013
Сообщений: 4,093
06.02.2013, 15:23  [ТС] 9
Цитата Сообщение от asd24 Посмотреть сообщение
T-SQL
1
2
3
4
SELECT firma.kodFirm, firma.nameFirm, firma.abbr, firma.sfera, firma.region, firma.nomDog, firma.dataDog, firma.kontract, firma.FIO, firma.doljnost, firma.tel, firma.adres, firma.sait, firma.EMail, firma.proces, firma.DataKontacta, firma.ОКомпании
FROM firma
WHERE firma.kodManager = (SELECT SUSER_NAME())
GROUP BY firma.kodFirm, firma.nameFirm, firma.abbr, firma.sfera, firma.region, firma.nomDog, firma.dataDog, firma.kontract, firma.FIO, firma.doljnost, firma.tel, firma.adres, firma.sait, firma.EMail, firma.proces, firma.DataKontacta, firma.ОКомпании;
не работает, находит только если в базе указать в "kodManager" имя пользователя "SELECT SUSER_NAME()", нужно "manager4" в домене (domen\manager4)

Добавлено через 1 час 21 минуту
готов отблагодарить рублем кто поможет
0
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
06.02.2013, 16:19 10
Цитата Сообщение от ltv_1953 Посмотреть сообщение
А чем не подходит функция CURRENT_USER?
CURRENT_USER SUSER_NAME()
dbo<Domain>\<Login>

Вариант использования:
T-SQL
1
2
3
4
5
6
7
8
9
10
CREATE TABLE dbo.users(
    user_id int IDENTITY(1,1) NOT NULL CONSTRAINT PK_users PRIMARY KEY CLUSTERED,
    user_login nvarchar(128) NOT NULL CONSTRAINT UQ_users UNIQUE,
    user_FIO nvarchar(200) NULL,
    dt_register date NULL,
    dt_connect datetime NULL,
    dt_exit datetime NULL,
    hello_text nvarchar(500) NULL
   )
GO
T-SQL
1
2
3
4
5
6
7
8
declare @user_id int
SELECT @user_id = user_id FROM dbo.users WHERE user_login=SUSER_NAME()
IF @user_id is null
   PRINT 'GO OUT, Anonymous'
ELSE BEGIN
   UPDATE dbo.users SET dt_connect=GETDATE() WHERE user_id=@user_id
   ...
END
1
1047 / 531 / 66
Регистрация: 16.01.2013
Сообщений: 4,093
07.02.2013, 10:14  [ТС] 11
Цитата Сообщение от cygapb-007 Посмотреть сообщение
Вариант использования:
я понял что все предлагают создать таблицу с пользователями. но на sql server есть уже безопасность раздел и там все пользователи sql server и AD. не ужели их нельзя ни как задействовать и БД делать пользователей? да и задача не просто делать ограничения они уже есть, а сделать один интерфейс чтобы под разными учетками в домене работала под своего пользователя и менялся ЗАПРОС. иначе придется мне делать под каждого пользователя свой интерфейс
0
1047 / 531 / 66
Регистрация: 16.01.2013
Сообщений: 4,093
07.02.2013, 10:45  [ТС] 12
Задача следующая.
Должна быть БД предприятий CRM (Система управления взаимоотношениями с клиентами). Каждый менеджер, а их 30 чел, должен видеть только свою базу. не хочется делать для каждого отдельно БД так как потом нужно отчеты общие делать для руководства. Думал сделать интерфейс который записывал в поле имя пользователя при создании нового предприятия, а список предприятий выводил запросом для этого пользователя, но тогда получается для каждого пользователя свой интерфейс а это работа умноженная на 30!
вот и пытаюсь узнать как можно в одном интерфейсе для всех сделать запрос который выводит только тот список предприятий в зависимости от какой учетки открыли этот интефейс. в домене есть AD (Active Directory («Активные директории», AD), в sql server уже перенес все учетки и доступ есть с ограничениями. а вот запрос не знаю как сделать общий.
посоветуйте что нибудь
0
107 / 107 / 5
Регистрация: 28.12.2012
Сообщений: 207
07.02.2013, 11:04 13
Цитата Сообщение от evgenii3000 Посмотреть сообщение
не работает, находит только если в базе указать в "kodManager" имя пользователя "SELECT SUSER_NAME()", нужно "manager4" в домене (domen\manager4)
Не совсем понял что Вас не устроило в моём запросе? Не нужно имя домена в SUSER_NAME()? Его можно обрезать при желании:
T-SQL
1
2
3
4
5
-- Статический домен: (domen\manager4)
SELECT SUBSTRING(SUSER_NAME(), 7, 20)
 
-- Динамический
SELECT SUBSTRING(SUSER_NAME(), CHARINDEX('\', SUSER_NAME()) + 1, LEN(SUSER_NAME()) - CHARINDEX('\', SUSER_NAME()))
т.е. теперь Ваш запрос будет выглядеть след.образом:
T-SQL
1
2
3
4
SELECT firma.kodFirm, firma.nameFirm, firma.abbr, firma.sfera, firma.region, firma.nomDog, firma.dataDog, firma.kontract, firma.FIO, firma.doljnost, firma.tel, firma.adres, firma.sait, firma.EMail, firma.proces, firma.DataKontacta, firma.ОКомпании
FROM firma
WHERE firma.kodManager = (SELECT SUBSTRING(SUSER_NAME(), 7, 20))
GROUP BY firma.kodFirm, firma.nameFirm, firma.abbr, firma.sfera, firma.region, firma.nomDog, firma.dataDog, firma.kontract, firma.FIO, firma.doljnost, firma.tel, firma.adres, firma.sait, firma.EMail, firma.proces, firma.DataKontacta, firma.ОКомпании;
при этом колонка KodManager должна быть типа varchar либо nvarchar
Таким образом у Вас и будет происходить "разделение интерфейса" в зависимости от пользователя..
0
1652 / 1151 / 173
Регистрация: 23.07.2010
Сообщений: 6,858
07.02.2013, 11:13 14
Единственно, что могу посоветовать - спроектировать схему данных. Выделить сущности, определить связи. Далее переходить к физической модели
0
1047 / 531 / 66
Регистрация: 16.01.2013
Сообщений: 4,093
07.02.2013, 11:53  [ТС] 15
Цитата Сообщение от asd24 Посмотреть сообщение
SELECT firma.kodFirm, firma.nameFirm, firma.abbr, firma.sfera, firma.region, firma.nomDog, firma.dataDog, firma.kontract, firma.FIO, firma.doljnost, firma.tel, firma.adres, firma.sait, firma.EMail, firma.proces, firma.DataKontacta, firma.ОКомпании
FROM firma
WHERE firma.kodManager = (SELECT SUBSTRING(SUSER_NAME(), 7, 20))
GROUP BY firma.kodFirm, firma.nameFirm, firma.abbr, firma.sfera, firma.region, firma.nomDog, firma.dataDog, firma.kontract, firma.FIO, firma.doljnost, firma.tel, firma.adres, firma.sait, firma.EMail, firma.proces, firma.DataKontacta, firma.ОКомпании;
Ошибка синтаксиса в выражении запроса 'firma.kodManager = (SELECT SUBSTRING(SUSER_NAME(), 7, 20))'.
0
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
07.02.2013, 12:01 16
Цитата Сообщение от evgenii3000 Посмотреть сообщение
Каждый менеджер, а их 30 чел, должен видеть только свою базу.
А потом заболел - и работа встала, передать полномочия на время болезни - не предусмотрено
0
107 / 107 / 5
Регистрация: 28.12.2012
Сообщений: 207
07.02.2013, 12:03 17
Цитата Сообщение от evgenii3000 Посмотреть сообщение
Ошибка синтаксиса в выражении запроса 'firma.kodManager = (SELECT SUBSTRING(SUSER_NAME(), 7, 20))'.
Давайте начнем с самого начала:
cкиньте скрипт на создание таблицы firma, а также несколько тестовых данных для колонки kodManager
1
1047 / 531 / 66
Регистрация: 16.01.2013
Сообщений: 4,093
07.02.2013, 12:08  [ТС] 18
прикрепил 2010 access
Вложения
Тип файла: rar manager4.rar (87.8 Кб, 2 просмотров)
0
1047 / 531 / 66
Регистрация: 16.01.2013
Сообщений: 4,093
07.02.2013, 12:09  [ТС] 19
Цитата Сообщение от cygapb-007 Посмотреть сообщение
А потом заболел
руководитель будет видеть все фирмы без фильтра
0
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
07.02.2013, 12:19 20
Цитата Сообщение от evgenii3000 Посмотреть сообщение
руководитель будет видеть все фирмы без фильтра
и выполнять работу за всех заболевших менеджеров?? забавный такой руководитель...
0
07.02.2013, 12:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.02.2013, 12:19
Помогаю со студенческими работами здесь

Не могу вывести информацию с SQL SERVER'a на программу для текущего пользователя
У меня тема &quot;Клуб знакомств&quot;. Создал БД на SQL Server'e (таблицы, представления, функции,...

Сделать аутентификацию пользователя по паролю, и в зависимости от пароля выдавать ту или иную информацию
Есть необходимость сделать аутентификацию пользователя по паролю, и в зависимости от пароля...

Написать SQL запрос, который позволяет выбрать информацию из базы данных
Информацию о водителях авто и выполненную каждым из них количество заказов, которые выполнили...

Где в реестре можно найти разную информацию о ПК?
Привет всем, нужно найти информацию о местонахождении информации о видеокарте, ОЗУ в реестре (...

Написать SQL запрос, который возвращает информацию о пяти ближайших днях рождения пользователей
Есть таблица пользователей CREATE TABLE `users` ( `user_id` int(11) NOT NULL AUTO_INCREMENT,...

SQL запрос, который будет возвращать первое несуществующее в таблице значение поля AI
CREATE TABLE IF NOT EXISTS `test` ( `num` int(11) NOT NULL, PRIMARY KEY (`num`) ); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru