Конференция "Базы" » Сколько пользователей на сервере [MSSQL]
 
  • Miau (06.08.12 16:36) [0]
    Есть потребность узнать, сколько пользователей сидит на сервере. Для sa это делается очень просто:

    select
    count(distinct loginame)
    from
    master..sysprocesses


    А как сделать для простых смертных? Для них этот запрос выдаст всегда 1, так как увидят они только самих себя.
  • sniknik © (06.08.12 18:14) [1]
    процедура с правами для простого смертного, в которой права на master..sysprocesses.
    ?
  • Miau (06.08.12 20:24) [2]
    Не, не помогает.

    На master..sysprocesses права у смертных есть по умолчанию, выбирать из себя она даёт. Но не всё, как выяснилось.

    помогает такое:
    GRANT IMPERSONATE ON LOGIN:: sa TO user1



    Но это делает огромную брешь в защите, поскольку пользователь тогда сможет делать что угодно.
  • sniknik © (06.08.12 21:15) [3]
    > GRANT IMPERSONATE ON LOGIN:: sa TO user1
    может лучше в мастере сделать ?
    REVOKE  SELECT  ON dbo.sysprocesses FROM user1
    т.к. там явно запрет стоит... раз не помогает.
  • Плохиш © (07.08.12 11:13) [4]

    > А как сделать для простых смертных?

    Чесно говоря, я не понимаю, зачем простому смертному знать количество пользователей?
  • Miau (07.08.12 15:41) [5]
    sniknik
    Попробовал. Прав не стало.
    Да там не в правах дело. Выбор-то разрешить можно без проблем. Но вот выбираются разные данные. Пользователь только себя видит, а админ всех сразу.

    Плохиш
    Например, если пользователей слишком много, не пускать в базу.
  • sniknik © (07.08.12 16:28) [6]
    > Например, если пользователей слишком много, не пускать в базу.
    ограничений по количеству подключенных в MSSQL практически нет (там какая то нереальная цифра... вряд ли возможно ее достигнуть)

    или забота о нагрузке? так один дурак может так нагрузить, как 10 тыс просто подключенных не нагрузит. и проконтролировать это практически нельзя.
  • Miau (07.08.12 19:27) [7]
    Не, дело не в нагрузке, просто хотелки начальства.
  • sniknik © (07.08.12 19:39) [8]
    "хотелка" программисту чтобы он игнорировал данные админом права? это по другому называется.

    кстати у тебя не считаются конекты, а их может быть много для каждого юзера. а если зайти из под sa, и больше никого, разноименного нет у тебя как раз и покажет 1 "юзера"... хотя их там не меньше десятка.
  • Miau (08.08.12 13:34) [9]
    Моя задача - посчитать количество логинов, а не коннектов. Коннектов пусть хоть по сто штук разводят.
  • stas © (09.08.12 22:04) [10]
    Странная задача.
    Можно сделать хранимую процедуру, которая будет выполнятся от имени администратора.
    CREATE PROCEDURE GETUSERCOUNT
    WITH EXECUTE AS ADMIN
    ....
  • Miau (20.08.12 14:46) [11]
    Спасибо всем за советы.
    Помогло вот что:
    GRANT VIEW SERVER STATE TO public
 
Конференция "Базы" » Сколько пользователей на сервере [MSSQL]
Есть новые Нет новых   [119507   +136][b:0][p:0.001]