Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/30: Рейтинг темы: голосов - 30, средняя оценка - 4.87
154 / 33 / 10
Регистрация: 27.10.2010
Сообщений: 87
1

Процедура для создания пользователей

16.03.2012, 13:09. Показов 5462. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста написать процедуру для создания пользователей.
Процедура должна создать пользователя на сервере и в БД
а также в таблицу Users добавить значения предоставленных ему прав.
Попробовал сделать так
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ALTER PROCEDURE [dbo].[usp_CreateUser]
@Login nvarchar(50), -- Логин пользователя
@Password nvarchar(50), -- Пароль пользователя
@IsAdmin bit, -- признак прав администратора
@IsUser bit -- признак прав простого пользователя
AS
BEGIN
    declare @SQL nvarchar(2000) 
    SET @SQL = ' CREATE LOGIN ' + QUOTENAME(@Login) + ' WITH PASSWORD = ' + QUOTENAME(@Password, '''') + ', CHECK_POLICY = OFF  
                        CREATE USER ' + QUOTENAME(@Login) + ' FOR LOGIN ' + QUOTENAME(@Login) +
                        ' IF ' + @IsAdmin + ' = 1  BEGIN EXEC sp_addrolemember "db_owner" ,' + @Login + ' END  
                         IF ' + @IsUser + ' = 1 BEGIN EXEC sp_addrolemember "db_datawriter" ,' + @Login + '
                         EXEC sp_addrolemember "db_datareader" ,' + @Login +' END 
                         IF  (select count (Us.Login) from Users AS Us WHERE Us.Login = @Login) = 0
                         BEGIN
                         INSERT INTO Users(Login,Right1,Right2) VALUES (@Login,@IsAdmin,@IsUser) 
                         END'
    EXECUTE (@SQL)
END
Но при выполнении получаю ошибку "The data types nvarchar and bit are incompatible in the add operator".
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2012, 13:09
Ответы с готовыми решениями:

Процедура для создания отчета о проданных товарах
Здравствуйте! У меня проблема и никак не могу разобраться. У меня имеется база данных Продуктового...

Процедура для создания и перемещение Image
Программист из меня не очень, поэтому и прошу помощи. Нужен алгоритм, который бы при выборе...

Процедура для динамического создания новых элементов на форме С#
Доброго времени суток! Необходимо создать процедуру, при обращение к которой на форме будет...

Скрипт для создания пользователей в AD через Power shell
Доброго время суток, прошу помощи, нужен скрипт для создания однотипных учетных записей, к примеру,...

2
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,079
16.03.2012, 14:52 2
Нужно выполнить CONVERT всех канкатенируемых переменных в nvarchar.)) у меня такая проблема тоже была. И еще не мешало быт в print() выводить содержимое @SQL, чтобы потом его скопировать для определения строки ошибки.
2
154 / 33 / 10
Регистрация: 27.10.2010
Сообщений: 87
17.03.2012, 08:45  [ТС] 3
Спасибо _katon_ за ответ после внесения изменений процедура работает.
Привожу код процедуры с комментариями, может кому пригодится.
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE PROCEDURE [dbo].[usp_CreateUser]
@Login NVARCHAR(50), -- Логин пользователя
@Password NVARCHAR(50), -- Пароль пользователя
@IsAdmin BIT, -- признак прав администратора
@IsUser BIT -- признак прав простого пользователя
AS
BEGIN
        DECLARE @SQL NVARCHAR(2000) -- декларируем @SQL
        SET @SQL = ' CREATE LOGIN ' + QUOTENAME(@Login) + ' WITH PASSWORD = ' + QUOTENAME(@Password, '''') + ', CHECK_POLICY = OFF ' -- Создаем логин
                         +  ' CREATE USER ' + QUOTENAME(@Login) + ' FOR LOGIN ' + QUOTENAME(@Login)  -- создаем пользователя
                         +  ' IF ' + CONVERT(nvarchar(1),@IsAdmin) + ' = 1  BEGIN EXEC sp_addrolemember "db_owner" ,' + @Login + ' END ' -- если есть права админа  назначаем роль db_owner
                         + '  IF ' + CONVERT(nvarchar(1),@IsUser) + ' = 1 BEGIN EXEC sp_addrolemember "db_datawriter" ,' + @Login  -- если есть права пользователя назначаем роль db_datawriter
                         + ' EXEC sp_addrolemember "db_datareader" ,' + @Login +' END ' -- если есть права пользователя назначаем роль db_datareader
                         + ' IF  (select count (Us.Login) from Users AS Us WHERE Us.Login = '+@Login+') = 0 ' -- если в таблице users в поле Login нет вводимого логина
                         + ' BEGIN
                              INSERT INTO Users(Login,IsAdmin,IsUser) VALUES ('+@Login +','+ CONVERT(nvarchar(1),@IsAdmin)+','+ CONVERT(nvarchar(1),@IsUser)+')' -- вносим в таблицу users логин (поле Login) и булевые значения прав администратора (поле IsAdmin) и пользователя (поле IsUser)
                         + ' END'
        EXECUTE (@SQL) -- выполняем @SQL
END
2
17.03.2012, 08:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2012, 08:45
Помогаю со студенческими работами здесь

Пакетный файл для создания и удаления групп пользователей с чтением параметров из текстового файла
Всем добрый день. У меня возникла проблемка по написанию батника. Он должен создавать и удалять...

Процедура Shell / подсчет количества процессов пользователей.
Написать процедуру Shell,которая: Вводит с терминала некоторое число Всем...

Процедура создания одномерного массива
Заданиие: По сформированному двумерному массиву сформировать одномерный: массив А - составленный...

Процедура создания массива, типа TPicture
Привет всем, встретился с проблемой создания массива картинок, и уже перерыл весь интернэт, и не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru