Redirect

This Page

has moved to a new address:

http://www.tuliorosa.com.br

Sorry for the inconvenience…

Redirection provided by Blogger to WordPress Migration Service

sábado, maio 15, 2010

Quantidade de contas de usuários no MS SQL Server 2008

image

Precisei saber qual a quantidade máxima de contas de usuários (login / user) que o MS SQL Server suporta, após procurar em todo lugar e não encontrar nenhuma referência sobre esse assunto, decidi descobrir por conta própria.

O objetivo era descobrir quantos LOGIN , quantos USER relacionados ao LOGIN adicionado em uma base de dados e em uma ROLE (grupo de permissão), é suportado pelo MS SQL Server.

Com os script abaixo fiz o teste no MS SQL Server 2008 R2 Enterprise e no SQL Azure. Após um tempo desisti de esperar pelo resultado devido a demora.

A conclusão é :

. MS SQL Server 2008 R2 Enterprise

  • Mais de 125.000 contas de usuários.
  • Base master fica com 55 MB

    . SQL Azure

  • Mais de 25.000 contas de usuários.
  • Base master fica com 5 MB

    Obs.: No SQL Azure, o fato de poder criar várias contas de usuários, viabiliza o desenvolvimento de aplicações desktop ou em dispositivos móveis que precisam conectar em uma base de dados na web de forma segura. Com essa possibilidade de criar vários usuários as aplicações podem utilizar usuários diferentes aproveitando toda a estrutura de segurança do próprio MS SQL Server, no lugar de criar um usuário único para a aplicação e fazer o controle interno em tabelas no MS SQL Server.

    Para quem desejar repetir o teste que fiz, segue os script utilizados.

    . Para o MS SQL Server 2008 R2 Enterprise

    -- Criar as contas de usuários

    declare @exec varchar(8000)
    declare @x bigint = 1

    while (@x > 0)
    begin
        Print @x;

    set @exec =
        '
        USE [ca];
        CREATE LOGIN [x'+ cast(@x as varchar) +'] WITH PASSWORD=N''teste'', DEFAULT_DATABASE=[ca], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF;
        CREATE USER [x'+ cast(@x as varchar) +'] FOR LOGIN [x'+ cast(@x as varchar) +'];
        EXEC sp_addrolemember N''RoleTeste'', N''x'+ cast(@x as varchar) +''';
        '
        exec(@exec)

        set @x += 1;
    end

    -- Apagar as contas de usuários

    declare @exec varchar(8000)
    declare @x bigint = 1

    while (@x > 0)
    begin
        Print @x;

    set @exec =
        '
        USE [ca];
        DROP USER [x'+ cast(@x as varchar) +'];
        DROP LOGIN [x'+ cast(@x as varchar) +'];
        '
        exec(@exec)

        set @x += 1;
    end

     

     . Para o SQL Azure

    Devido algumas restrições no SQL Azure é preciso executar o resultado da instrução T-SQL.

    -- Criar as contas de usuários (Login), conectado a base master.

    declare @exec varchar(8000)
    declare @x bigint = 1

    while (@x < 25001)
    begin
    set @exec =
        '
        CREATE LOGIN [x'+ cast(@x as varchar) +'] WITH PASSWORD=N''testeteste123!@#'';
        go
        '
        print (@exec)

        set @x += 1;
    end

     

    -- Criar as contas de usuários (User), conectado a base de teste.

    declare @exec varchar(8000)
    declare @x bigint = 1

    while (@x < 25001)  -- Até 25.000
    begin
    set @exec =
        '
        CREATE USER [x'+ cast(@x as varchar) +'] FOR LOGIN [x'+ cast(@x as varchar) +'];
        go
        '
        print (@exec)

        set @x += 1;
    end

    --------------------------------------

    create role RoleTeste;

    declare @exec varchar(8000)
    declare @x bigint = 1

    while (@x < 25001)  -- Até 25.000
    begin
    set @exec =
        '
        EXEC sp_addrolemember N''RoleTeste'', N''x'+ cast(@x as varchar) +''';
        go
        '
        print (@exec)

        set @x += 1;
    end

    -- Apagando as contas de usuários (User), conectado a base teste.

    declare @exec varchar(8000)
    declare @x bigint = 1

    while (@x < 25001)
    begin
        Print @x;

    set @exec =
        '
        DROP USER [x'+ cast(@x as varchar) +'];
        '
        exec(@exec)

        set @x += 1;
    end

    -- Apagando as contas de usuários (Login), conectado a base master.

    declare @exec varchar(8000)
    declare @x bigint = 1

    while (@x < 25001)
    begin
    set @exec =
        '
        DROP LOGIN [x'+ cast(@x as varchar) +'];
        GO
        '
        print (@exec)

        set @x += 1;
    end

  • Nenhum comentário:

    Postar um comentário