none
如何限制普通用户的连接数,而不限制管理员用户的连接数 RRS feed

  • 问题

  • 如何限制普通用户的连接数(如搭建网站时,只限制普通用户的连接数),而不现在管理员用户的连接数(如果普通用户的连接数已经满了,而管理员用户仍然可以连接上,做些正常的操作)???
    2014年5月19日 13:55

答案

  • EXEC sys.[sp_configure] @configname = 'user connections', -- varchar(35)
        @configvalue = 1000 -- int
    RECONFIGURE WITH override

    正如rmiao大侠所说sqlserver不能这样控制的

    2014年5月20日 8:31

全部回复

  • May try with server trigger, drop user connection if reaches limit already.
    2014年5月19日 15:17
  • 这种方式的用户体验非常不好,会造成用户连接闪断,还有其他方式么?譬如说有没有专门给管理员预留的连接?管理员专用连接除外
    2014年5月20日 1:19
  • sql 2005 及之后的版本有专门的管理员连接通道

    http://technet.microsoft.com/zh-cn/library/ms189595(v=sql.90).aspx

    2014年5月20日 1:29
  • 连接数的限制是统一的, 没有特别针对性

    server trigger 之外, 或许可以考虑一下资源调控器, 控制普通用户使用的最大资源, 保留一定的资源给管理员

    2014年5月20日 1:45
  • 你只要确保给WINDOWS足够的资源,管理员还是可以用DAC连接的。另外想问一下,为什么会有这个需求?


    Please Mark As Answer if it is helpful.

    2014年5月20日 2:05
  • 谢谢你,资源管理器控制的资源好像只能控制cpu和memory,我的担心是假定给普通用户分配了90%的资源池,管理员预留了10%的资源池,这时普通用户在高压力高并发的情况下,是不是也会把sql server的最大连接数占满?如果最大连接数也是总的连接数的90%的话,将会非常完美的符合我的需求了,非常感谢
    2014年5月20日 2:14
  • Max user connections is 32767, I never saw any sql server has that number of connections. Not even close. By the way, each sql instance only allows one DAC.
    2014年5月20日 2:39
  • 1. DAC 连接可以在普通用户连接无法连接的情况下, 仍然可以连接SQL, 这个通常不需要过于担心

    2. 通过资源调控器可以确保保留给服务器少量资源, 再结合DAC, 无法响应的风险应该是非常非常小了

    3. 研究了一下资源调控器, 可以控制并发请求数

    我用下面的方法控制所有用户只能一个并发 (对于楼主的要求, 可以创建两外负荷组, 通过分类函数(rgclassifier_v1)把管理员和普通用户分到不同的组, 管理员组不限制, 用户组限制并发)

    通过下面的负荷限制, 可以有我个连年, 但只能一个查询在执行, 其他操作会等等, 比如我建立两个连接, 一个执行 waitfor delay '00:00:30', 另一个执行 select 1, 在第一个查询完成前, 第二个查询是等等的

    CREATE WORKLOAD GROUP test
    WITH(
    	GROUP_MAX_REQUESTS = 1
    )
    GO
    CREATE FUNCTION dbo.rgclassifier_v1() RETURNS sysname 
    WITH SCHEMABINDING
    AS
    BEGIN
        DECLARE @grp_name sysname
            SET @grp_name = 'test'
        RETURN @grp_name
    END;
    GO 
    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION= dbo.rgclassifier_v1);
    GO
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    

    2014年5月20日 2:45
  • 如果我把 user connections设置成1000,然后我还想把用户的连接数占95%,管理员的连接数占5%,这样能够控制么?如果能够控制怎么控制,DB级别的存储过程除外
    2014年5月20日 3:04
  • Sql doesn't come with such setting. By the way, resource governor can only control query memory used by each connection but not cache.
    2014年5月20日 3:14
  • EXEC sys.[sp_configure] @configname = 'user connections', -- varchar(35)
        @configvalue = 1000 -- int
    RECONFIGURE WITH override

    正如rmiao大侠所说sqlserver不能这样控制的

    2014年5月20日 8:31