SQL Server 2005中执行'CREATE USER'所需的权限是什么?

5
我正在尝试在我的应用程序中创建 SQL Server 登录和数据库用户,以及自定义的应用程序用户行。我希望这些用户能够创建其他用户 - 即应用程序将控制谁可以/不能创建用户,但我需要所有用户都具有创建 SQL Server 登录和数据库用户的权限。
我已经使服务器登录权限工作正常 - 即现有用户/登录可以创建新的登录 - 通过将登录添加到 'securityadmin' 服务器角色中 - 这授予了 'ALTER ANY LOGIN' 权限。
我尝试使用 'db_accessadmin' 数据库角色完成相同的操作,该角色据说授予 ALTER ANY USER 权限,这是 CREATE USER 所需的权限。
然而,每当我尝试使用具有上述特权的用户创建新的数据库用户时,都会出现权限异常。
我已经尝试手动授予 ALTER ANY USER 权限给特定用户(GRANT ALTER ANY USER TO demouser),但这也不起作用。
4个回答

9

从技术上讲,是的。是否正确或错误...不发表评论。

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

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

这是sp_addrolemember中提到的。

实际上,通过运行sp_addrolemember,您正在更改角色而不是用户,因此“ALTER ANY ROLE”足以而无需完整的db_owner权限。


1

我的错 - 我已经找到了问题所在 - 不是 CREATE USER 失败了,而是后续调用 'sp_addrolemember' 失败了。这需要更多的权限,我没有分配。

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

有没有更简洁的方法来实现我在这里尝试做的事情 - 即创建允许创建其他用户的用户?


将用户作为所有者非常危险。你在这里有一个重大的安全漏洞。请小心。 - Brody

0
/* 
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/


0

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

您是否无法只拥有一个SQL帐户,该帐户具有添加用户的权限,并且应用程序每次使用该帐户添加新用户?然后,这些用户将不需要添加其他用户的能力。也许这对于您特定的目标行不通,但肯定还有其他方法。

但是说了这么多...不,确实没有更清洁的方法。用户必须被分配到正确的角色才能具有以后添加其他用户的能力。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接