-
Есть потребность узнать, сколько пользователей сидит на сервере. Для sa это делается очень просто:
select
count(distinct loginame)
from
master..sysprocesses
А как сделать для простых смертных? Для них этот запрос выдаст всегда 1, так как увидят они только самих себя.
-
процедура с правами для простого смертного, в которой права на master..sysprocesses. ?
-
Не, не помогает. На master..sysprocesses права у смертных есть по умолчанию, выбирать из себя она даёт. Но не всё, как выяснилось. помогает такое: GRANT IMPERSONATE ON LOGIN:: sa TO user1 Но это делает огромную брешь в защите, поскольку пользователь тогда сможет делать что угодно.
-
> GRANT IMPERSONATE ON LOGIN:: sa TO user1 может лучше в мастере сделать ? REVOKE SELECT ON dbo.sysprocesses FROM user1 т.к. там явно запрет стоит... раз не помогает.
-
> А как сделать для простых смертных?
Чесно говоря, я не понимаю, зачем простому смертному знать количество пользователей?
-
sniknik Попробовал. Прав не стало. Да там не в правах дело. Выбор-то разрешить можно без проблем. Но вот выбираются разные данные. Пользователь только себя видит, а админ всех сразу.
Плохиш Например, если пользователей слишком много, не пускать в базу.
-
> Например, если пользователей слишком много, не пускать в базу. ограничений по количеству подключенных в MSSQL практически нет (там какая то нереальная цифра... вряд ли возможно ее достигнуть)
или забота о нагрузке? так один дурак может так нагрузить, как 10 тыс просто подключенных не нагрузит. и проконтролировать это практически нельзя.
-
Не, дело не в нагрузке, просто хотелки начальства.
-
"хотелка" программисту чтобы он игнорировал данные админом права? это по другому называется.
кстати у тебя не считаются конекты, а их может быть много для каждого юзера. а если зайти из под sa, и больше никого, разноименного нет у тебя как раз и покажет 1 "юзера"... хотя их там не меньше десятка.
-
Моя задача - посчитать количество логинов, а не коннектов. Коннектов пусть хоть по сто штук разводят.
-
Странная задача. Можно сделать хранимую процедуру, которая будет выполнятся от имени администратора. CREATE PROCEDURE GETUSERCOUNT WITH EXECUTE AS ADMIN ....
-
Спасибо всем за советы. Помогло вот что: GRANT VIEW SERVER STATE TO public
|