Разрешения, необходимые для «CREATE USER» в SQL Server 2005? - PullRequest
3 голосов
/ 17 декабря 2008

Я пытаюсь создать имя пользователя SQL Server и пользователя базы данных из моего приложения вместе с пользовательской строкой приложения. Я хочу, чтобы эти пользователи могли создавать других пользователей - то есть приложение будет контролировать, кто может / не может создавать пользователей, но мне нужно, чтобы у всех пользователей были разрешения на создание имен входа на SQL-сервер и пользователей базы данных.

У меня есть разрешения на вход в систему на сервере - то есть существующий пользователь / логин может создать новый логин - добавив логины к роли сервера 'securityadmin' - что дает привилегию 'ALTER ANY LOGIN'.

Я пытался сделать то же самое с пользователями базы данных - добавив их в роль базы данных 'db_accessadmin' - которая предположительно предоставляет привилегию ALTER ANY USER, которая требуется для CREATE USER.

Однако каждый раз, когда я пытаюсь создать нового пользователя базы данных, используя пользователя с вышеуказанными привилегиями, я получаю исключение разрешений.

Я пытался вручную предоставить разрешение ALTER ANY USER определенному пользователю (GRANT ALTER ANY USER TO демоусер), но это тоже не работает.

Ответы [ 4 ]

8 голосов
/ 18 декабря 2008

Технически, да. Правильно это или нет ... без комментариев.

В любом случае, безопасность базы данных разделена на 2 функции:

  • db_accessadmin для управления пользователями (или разрешения «ALTER ANY USER», как вы упомянули)
  • db_securityadmin позволяет управлять членством в ролях и разрешениями объектов (или разрешением «ALTER ANY ROLE»)

Это упоминается для sp_addrolemember .

Вы на самом деле изменяете роль, а не пользователя, запустив sp_addrolemember, чтобы «ALTER ANY ROLE» было достаточно без полных прав db_owner.

1 голос
/ 17 декабря 2008

Мое плохое - я нашел проблему - это был не CREATE USER, который терпел неудачу, а последующий вызов sp_addrolemember. Это требует дополнительных разрешений, которые я не назначал.

В частности, мне нужно было добавить моих пользователей в роль базы данных db_owner, чтобы они могли назначать другим / новым пользователям фиксированные роли базы данных.

Есть ли более чистый способ, позволяющий мне достичь того, что я пытаюсь сделать здесь - т.е. создать пользователей, которым разрешено создавать других пользователей?

0 голосов
/ 11 апреля 2012
/* 
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 голосов
/ 17 декабря 2008

Это кажется очень опасным, легко превращаясь в кошмар безопасности. Ничего не зная о том, почему вы думаете, что это лучшее решение для достижения вашей цели, я не могу сказать вам, чтобы вы не делали так, но вау! - Я бы долго и усердно думал о том, действительно ли это необходимо. Паутина пользователей просто кажется, что с точки зрения администратора баз данных быстро управлять им невозможно.

Не могли бы вы иметь только одну учетную запись SQL, которая имеет разрешения для добавления пользователей, и приложение использует ее каждый раз для добавления новых пользователей? Этим пользователям тогда не понадобится возможность добавлять других пользователей. Может быть, это не будет работать для вашей конкретной цели, но, безусловно, есть и другой способ.

Но, сказав все это ... нет, на самом деле нет более чистого пути. Пользователю нужно будет назначить правильные роли, чтобы иметь возможность позже добавлять других пользователей.

...