Я пытаюсь создать хранимую процедуру для создания логина и пользователя базы данных?

Я занимаюсь разработкой приложения на C # с SQL Server и хотел бы вызвать хранимую процедуру для создания имени входа и пользователя.

Я ищу самый простой способ сделать это, просто вещи по умолчанию, но есть имя пользователя и пароль.

Создание рядом с логином подчеркнуто красным?

Но я думаю, что мой логин в порядке? Пожалуйста, скажите мне, если я что-то упустил.

А с пользователем create это всего лишь один лайнер?

CREATE PROCEDURE CreateLoginAndUser 
       @UserName

   CREATE LOGIN @UserName 
   WITH PASSWORD = 'password', 
        DEFAULT_DATABASE = [TestAudit],
        DEFAULT_LANGUAGE = [British],
        CHECK_EXPIRATION=OFF,
        CHECK_POLICY=ON;

   CREATE USER 'DEV' + @UserName 
       [{ FOR | FROM } LOGIN @UserName] [WITH DEFAULT_SCHEMA = schema]

Я не понимаюFOR а такжеFROM ...

Могу ли я сделать что-то вроде этого:

CREATE PROCEDURE CreateLoginAndUser
     @UserName

    CREATE LOGIN @UserName  
    WITH PASSWORD = 'password', 
         DEFAULT_SCHEMA = schema    

    CREATE USER 'DEV'[email protected] 
       [{ FOR | FROM } LOGIN @UserName] [WITH DEFAULT_SCHEMA = schema]

Как погуглили следующие источники:

http://ss64.com/sql/login_c.html

http://ss64.com/sql/user_c.html

Ответы на вопрос(4)

Решение Вопроса

Рассмотрите возможность использования динамического SQL для создания пользователя. Например, чтобы создать логин сервера с именем@login с пользователем базы данных под названием'DEV' + @login:

create procedure dbo.CreateLoginAndUser(
        @login varchar(100),
        @password varchar(100),
        @db varchar(100))
as
declare @safe_login varchar(200)
declare @safe_password varchar(200)
declare @safe_db varchar(200)
set @safe_login = replace(@login,'''', '''''')
set @safe_password = replace(@password,'''', '''''')
set @safe_db = replace(@db,'''', '''''')

declare @sql nvarchar(max)
set @sql = 'use ' + @safe_db + ';' +
           'create login ' + @safe_login + 
               ' with password = ''' + @safe_password + '''; ' +
           'create user DEV' + @safe_login + ' from login ' + @safe_login + ';'
exec (@sql)
go

Может быть проще построить SQL-выражение на стороне клиента. Но даже тогда вы не можете использовать параметры сcreate login заявление. Так что будьте начеку по поводу SQL-инъекций.

{FOR | FROM} означает, что вы можете использовать для или из.

| (вертикальная черта) = Разделяет элементы синтаксиса, заключенные в квадратные или скобки. Вы можете использовать только один из предметов.

РЕДАКТИРОВАТЬ:

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

Вот пример того, как создать логин для всего сервера и пользователя для вашей базы данных адаптировать его к процедуре

USE [master]
GO
CREATE LOGIN [usr] WITH PASSWORD=N'pass', DEFAULT_DATABASE=[yourDb], DEFAULT_LANGUAGE=[English], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO

USE [yourDb]
GO
CREATE USER [usr] FOR LOGIN ['usr]
GO

вам нужно только получить usr и пароль в качестве параметра и использовать его

Вы должны учитывать права пользователя. Чтобы создать имя входа на сервер sql и пользователя базы данных, вы должны иметь высокие привилегии для экземпляра SQL Server. Таким образом, либо вам нужно предоставить права пользователя для выполнения действия (а также разрешения на уровне сервера и рычага базы данных), либо использовать другой механизм, чтобы не сделать ваш сервер уязвимым.

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

Кроме того, тот, кто может использовать трассировку, сможет видеть пароли (если вы не включаете это в процедуру, пароль не отображается в трассировке).

Ваш ответ на вопрос