Я пытаюсь создать одну хранимую процедуру, которая:
1. Создайте базу данных
2. Создайте логин
3. Создать пользователя
4. Назначьте пользователя для входа
5. Сделать логин SA (роль системного администратора)
Я пытаюсь создать эту хранимую процедуру с 3 параметрами. Первый параметр - это имя для входа. Второй параметр - это имя пользователя. Третий параметр - это пароль для входа в систему. (Имя базы данных совпадает с именем пользователя) Когда у меня есть только два параметра: пользователь и пароль (с именем базы данных и именем входа, совпадающим с именем пользователя), он работает без ошибок.
USE []
GO
/****** Object: StoredProcedure [dbo].[spCreateDatabases] Script Date: 11/8/2018 1:54:09 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[spCreateDatabaseWithSAUserAndLoginx]
@userID varchar(50),
@password varchar(10)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @newdb sysname
DECLARE @SQL NVARCHAR(4000)
SET @newdb = @userID
PRINT @UserID
EXEC('CREATE DATABASE ' + @newdb)
END
BEGIN
-- Create the user name
SET @SQL = 'USE ' + @newdb + ';' + 'CREATE LOGIN ' + @userID + ' WITH PASSWORD = ''' + @password + '''; ' +
'CREATE USER ' + @userID + ' FOR LOGIN ' + @userID + '; ' + 'ALTER SERVER ROLE sysadmin ADD MEMBER ' + @userID + ';'
EXECUTE(@SQL);
END
Однако, когда я добавляю новый параметр, он выдает мне сообщение об ошибке: «Невозможно добавить принципала сервера», потому что он не существует или у вас нет разрешения.
USE []
GO
/****** Object: StoredProcedure [dbo].[spCreateDatabases] Script Date: 11/8/2018 1:54:09 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spCreateDatabaseWithSAUserAndLoginx]
@userID varchar(50),
@login varchar (50),
@password varchar(10)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @newdb sysname
DECLARE @SQL NVARCHAR(4000)
SET @newdb = @userID
EXEC('CREATE DATABASE ' + @newdb)
END
BEGIN
-- Create the user name
SET @SQL = 'USE ' + @newdb + ';' + 'CREATE LOGIN ' + @login + ' WITH PASSWORD = ''' + @password + '''; ' +
'CREATE USER ' + @userID + ' FOR LOGIN ' + @login + '; ' + 'ALTER SERVER ROLE sysadmin ADD MEMBER ' + @userID + ';'
EXECUTE(@SQL);
END