代码之家  ›  专栏  ›  技术社区  ›  Ben Jones

SQL Server 2005中“CREATE USER”需要权限吗?

  •  5
  • Ben Jones  · 技术社区  · 17 年前

    我正试图从我的应用程序中创建一个SQL server登录名和数据库用户,以及一个自定义的应用程序用户行。我希望这些用户能够创建其他用户,即应用程序将控制谁可以/不能创建用户,但我需要所有用户都有创建SQL server登录名和数据库用户的权限。

    我已使服务器登录权限正常工作,即现有用户/登录名可以通过将登录名添加到“securityadmin”服务器角色来创建新的登录名,该角色授予“ALTER ANY login”权限。

    我试图对数据库用户做同样的事情——将他们添加到“db_accessadmin”数据库角色中——这应该授予CREATE USER所需的ALTER ANY USER权限。

    但是,每当我尝试使用具有上述权限的用户创建新的数据库用户时,我都会遇到权限异常。

    我曾尝试手动授予特定用户ALTER ANY USER权限(授予ALTER ANY USER降级权限),但这也不起作用。

    4 回复  |  直到 10 年前
        1
  •  9
  •   gbn    17 年前

    从技术上讲,是的。无论是对是错。…无可奉告。

    无论如何,数据库安全分为两个功能:

    • db_accessadmin用于管理用户(或您提到的“ALTER ANY USER”权限)
    • db_securityadmin 允许您管理角色成员资格和对象权限(或“ALTER ANY ROLE权限”)

    提到这一点是为了 sp_addrolemember .

    通过运行sp_addrolemember,您实际上是在更改角色,而不是用户,因此“ALTER ANY role”就足够了,而无需拥有完全的db_owner权限。

        2
  •  1
  •   Ben Jones Ben Jones    17 年前

    我的问题是——我发现了问题——失败的不是CREATE USER,而是随后对“sp_addrolemember”的调用。这需要我没有分配的其他权限。

    特别是,我需要将我的用户添加到db_owner数据库角色中,以便允许他们将其他/新用户分配给固定的数据库角色。

    有没有一种更干净的方法可以让我实现我在这里想要做的事情——即创建允许创建其他用户的用户?

        3
  •  0
  •   Carlton Jenke    17 年前

    这似乎非常危险,很容易成为安全噩梦。不知道为什么你认为这是实现目标的最佳解决方案,我真的不能告诉你不要这样做,但哇!!-我会认真思考这是否真的有必要。从DBA的角度来看,用户的蜘蛛网似乎很快就无法管理。

    您是否不能只拥有一个具有添加用户权限的SQL帐户,并且应用程序每次都使用该帐户添加新用户?这样,这些用户就不需要添加其他用户的能力。也许这对你的具体目标不起作用,但肯定还有其他方法。

    但话虽如此。..不,真的没有更干净的方法。用户必须被分配到正确的角色,以便以后能够添加其他用户。

        4
  •  0
  •   Taryn Frank Pearson    13 年前
    /* 
    TOPIC: create a login ,who can add other logins to databases  (securityadmin server role)
    */
    
    USE MASTER 
    GO 
    
    Create login securityTestLogin with password = '@@somepassword123'
    
    -----add this to server , this is server level security role ------- 
    
    EXEC master..sp_addsrvrolemember @loginame = N'securityTestLogin', @rolename = N'securityadmin'
    
    --- first this login should be a user in database where we want to give other users access 
    
    USE HTDBA
    GO 
    Create user securityTestLogin for login securityTestLogin 
    
    EXEC sp_addrolemember N'db_accessadmin', N'securityTestLogin'
    
    -- depends on your requriemtnt you might also want this permission too 
    --EXEC sp_addrolemember N'db_securityadmin', N'securityTestLogin'
    
    GO
    
    ------ Now we think about adding other users to different database roles  ------------- 
    /* 
    There is one gottcha , db_securityadmin role cannot add users to the fixed database roles ,only 
    db_owner can perform this action , but for security we don't want to give this permission .
    so we need a work around 
    Create a role with required permission and then add users to that role.
    */ 
    
    --Create user defined database role Readers
    EXEC sp_addrole DBUser
    
    -- Add this role to fixeddbroles to get database level permission 
    EXEC sp_addrolemember db_datareader, DBUser
    EXEC sp_addrolemember db_datawriter, DBUser 
    GO
    
    --------READY TO TEST --------
    ------ we are using this sample login for test 
    use master 
    Go 
    Create login testlogin1 with password='@@somepassword123' 
    
    use HTDBA 
    go 
    Create user testlogin1 for login testlogin1 
    
    --- now add this user to user created DBUser role . 
    EXEC sp_addrolemember DBUser, testlogin1  
    

    一篇关于SQL权限的好文章:

    http://www.sqlservercentral.com/articles/Security/sqlserversecurityfixeddatabaseroles/1231/