4

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

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

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

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

我已经尝试手动将 ALTER ANY USER 权限授予特定用户(GRANT ALTER ANY USER TO demouser),但这也不起作用。

4

4 回答 4

9

从技术上讲,是的。不管是对是错……不予置评。

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

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

sp_addrolemember提到了这一点。

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

于 2008-12-18T12:05:05.870 回答
1

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

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

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

于 2008-12-16T22:27:59.623 回答
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/

于 2012-04-10T21:19:33.293 回答
-1

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

您不能只拥有一个有权添加用户的 SQL 帐户,而应用程序每次都使用它来添加新用户吗?然后,这些用户将不需要添加其他用户的能力。也许这不适用于您的特定目标,但肯定还有其他方法。

但是说了这么多……不,真的没有更清洁的方法。必须为用户分配正确的角色,以便以后能够添加其他用户。

于 2008-12-16T22:42:27.940 回答