Создать пользователя с ролями внутри хранимой процедуры - PullRequest
0 голосов
/ 25 марта 2019

Я хочу создать пользователей с ролями внутри хранимой процедуры. Я попробовал простой запрос, но он не работал, вероятно, из-за GO, затем я попытался поместить это в хранимую процедуру, которая также не работала из-за GO. Я пытался поместить символ новой строки в динамический запрос, который тоже не работал. Кто-нибудь может помочь?

create PROCEDURE dbo.CreateUser
AS
BEGIN
/*** Creating User ***/

DECLARE @SQL  NVARCHAR(MAX)

SET @SQL = '
CREATE USER [PRODUCTION\user1] FOR LOGIN [PRODUCTION\user1] WITH DEFAULT_SCHEMA=[dbo]
GO
sp_addrolemember  @rolename =  ''db_owner'', @membername =  ''PRODUCTION\user1''  
GO
CREATE USER [PRODUCTION\user2] FOR LOGIN [PRODUCTION\user2] WITH DEFAULT_SCHEMA=[dbo]
GO
sp_addrolemember  @rolename =  ''db_owner'', @membername =  ''PRODUCTION\user2''  
GO'
/*** Creating User ***/

EXEC(@SQL)
END

1 Ответ

1 голос
/ 25 марта 2019

Лично я бы так и сделал:

CREATE PROCEDURE dbo.CreateUser
AS
BEGIN
/*** Creating User ***/

    DECLARE @SQL  NVARCHAR(MAX)

    SET @SQL = N'CREATE USER [PRODUCTION\user1] FOR LOGIN [PRODUCTION\user1] WITH DEFAULT_SCHEMA=[dbo];' + NCHAR(13) + NCHAR(10) +
               N'CREATE USER [PRODUCTION\user2] FOR LOGIN [PRODUCTION\user2] WITH DEFAULT_SCHEMA=[dbo];';
    --PRINT @SQL; --Your debugging best friend
    EXEC sp_executesql @SQL;

    SET @SQL = N'ALTER ROLE db_owner ADD MEMBER [PRODUCTION\user1];' + NCHAR(13) + NCHAR(10) +
               N'ALTER ROLE db_owner ADD MEMBER [PRODUCTION\user2];';
    --PRINT @SQL; --Your debugging best friend
    EXEC sp_executesql @SQL;

END

Это избавляет от процедуры sp_addrolemember, которая устарела. Он также разделяет создание и членство на 2 отдельных пакета, чтобы гарантировать, что пользователи действительно были созданы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...