Не удалось создать пользователя в базе данных SQL server
Привет,
Я хочу создать базу данных с помощью скрипта и в то же время хочу создать пользователя внутри этой базы данных. Для этого я создал ниже приведенную хранимую процедуру.
----Procedure Start---- CREATE PROCEDURE [dbo].[USP_CreateDatabase] ( @DatabaseName nvarchar(100), @UserName nvarchar(100), @DBPassword nvarchar(100) ) as /* exec USP_CreateDatabase 'ST_Test','client','client@123' */ BEGIN SET NOCOUNT ON; DECLARE @scriptfirst nvarchar(max); IF NOT EXISTS(SELECT name FROM master.dbo.sysdatabases WHERE name LIKE '%'+ @DatabaseName +'%') BEGIN SET @scriptfirst = N' use [master];' +char(13)+char(10)+ ' Create database ['+ @DatabaseName +'];' +char(13)+char(10); EXEC sp_executesql @scriptfirst; --select @scriptfirst; END IF NOT EXISTS(SELECT dp.name FROM sys.server_principals sp LEFT JOIN sys.database_principals dp ON sp.sid = dp.sid WHERE dp.name LIKE '%'+ @UserName +'%' and sp.default_database_name LIKE '%'+ @DatabaseName +'%') BEGIN SET @scriptfirst = N' use ['+ @DatabaseName +'];' +char(13)+char(10)+ ' SET ANSI_NULLS ON;' +char(13)+char(10)+ ' SET QUOTED_IDENTIFIER ON;' +char(13)+char(10)+ ' CREATE USER [' + @UserName + '] FOR LOGIN [' + @UserName + '] WITH DEFAULT_SCHEMA=[dbo];' +char(13)+char(10)+ ' ALTER ROLE [db_owner] ADD MEMBER [' + @UserName + '];' +char(13)+char(10); EXEC sp_executesql @scriptfirst; --select @scriptfirst; END END GO ----Procedure End----Эта процедура прекрасно работает, когда я бегу с пользователем 'sa' (sysadmin).
На производстве у нас не было прав " sa " (сисадмина). Они предоставляют нам логин, который имеет роли сервера "public" и "dbcreator". Теперь, когда я запустил хранимую процедуру с правами dbcreator, она создает базу данных, но не создает пользователя.
Это дает мне ошибку:
Цитата:Msg 15063, Уровень 16, Состояние 1, Строка 4
У входа в систему уже есть учетная запись под другим именем пользователя.
Msg 15151, Уровень 16, Состояние 1, Строка 5
Невозможно добавить основного "клиента", потому что он не существует или у вас нет разрешения.
Я проверил эту проблему и обнаружил, что она прикрепила вновь созданную базу данных к пользователю "dbo". Мое требование состоит в том, чтобы создать базу данных и создать пользователя "клиент" внутри вновь созданной базы данных, а не пользователя "dbo".
Примечание: на производстве мы будем иметь логин только с правами "dbcreator".
Пожалуйста, дайте мне знать, как можно этого добиться ?
Что я уже пробовал:
Я попробовал несколько вещей:
1) изменил режим базы данных с многопользовательским, но это не сработало.
2) пробовал менять новоиспеченного владельца базы данных 'СА'.
EXEC sp_changedbowner 'sa';Но из-за проблемы с правами это дает мне ошибку:
Цитата:Msg 15151, Уровень 16, Состояние 1, Строка 1
Не можете найти принципала "СА", потому что он не существует или у вас нет разрешения.
Herman<T>.Instance
Чтобы создать нового пользователя, сначала создайте логин, а затем самого пользователя.