Мне нужно идти с db_securityadmin .
Используйте sp_addrolemember , чтобы раздать роль.
Пример:
EXEC sp_addrolemember 'db_securityadmin', 'shopDBUser'
Если вы просто хотите, чтобы shopDBUser мог создавать «подпользователей» для своего собственного пользователя: вы не можете делать это с ролями. Я предлагаю создать хранимую процедуру, которая делает это, предоставляя сохраненным повышенным разрешениям prcedure, а затем предоставляя разрешения shopDBUser для выполнения хранимой процедуры.
Вы, конечно, должны будете самостоятельно выполнить необходимые проверки в STP. Главным образом потому, что я ДУМАЮ, что концепция суб-пользователей просто не известна в SQL.
EDIT:
Возможно реализовать концепцию суб-пользователей как отдельную таблицу UserInfo. Смотрите пример ниже:
CREATE PROCEDURE [dbo].[stp_CreateSubUser]
(
@SubUser nvarchar(200),
@Pass nvarchar(200)
)
AS
BEGIN
EXEC('create login ' + @SubUser + ' with password=''' + @Pass + ''', default_database = shopDB')
EXECUTE AS OWNER
EXEC('create user ' + @SubUser + ' for login ' + @SubUser )
EXECUTE AS OWNER
EXEC sp_addrolemember 'db_datareader', @SubUser
EXECUTE AS OWNER
EXEC sp_addrolemember 'db_datawriter', @SubUser
EXECUTE AS OWNER
INSERT [dbo].[UserInfo]
([UserName],[ParentUserName])
VALUES
(@SubUser, USER)
END