Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 sp_adduser и sp_addlogin от простого пользователя  [new]
Mifodix
Member

Откуда:
Сообщений: 10
Всем доброго времени!
Возникла следующая проблема:
Пользователю БД дано разрешение на выполнение хранимой процедуры, которая отвечает за регистрацию нового пользователя, т. е. она использует sp_addlogin и sp_adduser. Естественно, SQL Server ругается на отсутствие прав для выполнения этих процедур. Как исправить?
Пробовал создавать процедуру так:
CREATE procedure [dbo].[RegisterNewUser] @userName varchar(32), @userPass varchar(64) WITH EXECUTE AS OWNER
и так
CREATE procedure [dbo].[RegisterNewUser] @userName varchar(32), @userPass varchar(64) WITH EXECUTE AS 'dbo'
Всё без толку.
Разрешить выполнение процедур sp_addlogin и sp_adduser этому пользователю не могу, т. к.:
"Разрешения на серверные представления каталогов, системные хранимые процедуры или расширенные хранимые процедуры могут быть предоставлены только в том случае, если текущей является база данных master. (Microsoft SQL Server, ошибка: 4629)"
Заранее спасибо за помощь!
13 июн 11, 02:27    [10805158]     Ответить | Цитировать Сообщить модератору
 Re: sp_adduser и sp_addlogin от простого пользователя  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
http://www.gotdotnet.ru/blogs/DeColores/1922/
13 июн 11, 09:05    [10805280]     Ответить | Цитировать Сообщить модератору
 Re: sp_adduser и sp_addlogin от простого пользователя  [new]
Mifodix
Member

Откуда:
Сообщений: 10
Спасибо за статью, но не выходит:
1. Если создать сертификат внутри моей базы, то невозможно создать логин с этим сертификатом (сертификат не виден)
2. Если создать сертификат в базе master, то можно создать логин с этим сертификатом, но вот подписать хранимую процедуру внутри моей базы этим сертификатом нельзя (он опять-таки не виден)

Как создать один сертификат и для моей базы, и для базы master?
13 июн 11, 15:01    [10806180]     Ответить | Цитировать Сообщить модератору
 Re: sp_adduser и sp_addlogin от простого пользователя  [new]
Mifodix
Member

Откуда:
Сообщений: 10
Так и не выяснил как сделать один сертификат для двух баз. Более того, как я понял, в статье даются права хранимой процедуре только если юзер Demo зашёл под логином VirtualSecurityOfficer. Или я не прав?
14 июн 11, 17:10    [10811813]     Ответить | Цитировать Сообщить модератору
 Re: sp_adduser и sp_addlogin от простого пользователя  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5503
Блог
Mifodix
если юзер Demo зашёл под логином VirtualSecurityOfficer
Это как? ;)

Можно сделать один сертификат в базе мастер, дав логину, созданному на его основании, права sysadmin.
Но это не решит "проблему" того, что логины - это сущности уровня сервера и существуют в базе master, а пользователи - сущности уровня базы данных и существуют в конкретной БД.

Так что лучше разделить функционал.
Или дождаться SQL 2011, в котором этот вопрос решается использованием Contained Database
14 июн 11, 17:54    [10812060]     Ответить | Цитировать Сообщить модератору
 Re: sp_adduser и sp_addlogin от простого пользователя  [new]
Mifodix
Member

Откуда:
Сообщений: 10
DeColo®es
Это как? ;)

Это я жутко ступил:) Извините.

DeColo®es
Можно сделать один сертификат в базе мастер, дав логину, созданному на его основании, права sysadmin.

Что это даст? Сейчас максимум что я могу, это сделать хранимую процедуру для создания логинов в базе master, но вызвать её от имени пользователя из своей базы я естественно не могу.
14 июн 11, 18:34    [10812314]     Ответить | Цитировать Сообщить модератору
 Re: sp_adduser и sp_addlogin от простого пользователя  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5503
Блог
sysadmin может все, в том числе создавать пользователей в любой базе.
Но опять же, права пользователей баз хранятся в базах, права на объекты в БД mster также хранятся в базе master.
Поэтому права на создание логинов придется выдавать логину (ну или пользователю БД master), на уровне сервера.
14 июн 11, 18:55    [10812434]     Ответить | Цитировать Сообщить модератору
 Re: sp_adduser и sp_addlogin от простого пользователя  [new]
Mifodix
Member

Откуда:
Сообщений: 10
Всем спасибо за помощь! В итоге выбрал радикальное решение - отказался от использования ролевой модели MS Sql Server:)
16 июн 11, 00:37    [10819191]     Ответить | Цитировать Сообщить модератору
 Re: sp_adduser и sp_addlogin от простого пользователя  [new]
П-Л
Guest
Мне это кажется крайне не разумным.
16 июн 11, 08:47    [10819581]     Ответить | Цитировать Сообщить модератору
 Re: sp_adduser и sp_addlogin от простого пользователя  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
Mifodix,

Скорее всего опрометчивое решение. Если не устраивает подписывание процедуры, то есть старый добрый вариант с промежуточной таблицей и джобом, создающим логины.

DeColo®es,

Мне кажется, что в вашей статье было бы неплохо заменить
set @sql = 'create login ['+@login+'] with password = '''+replace(@password, '''', '''''')+''''
на
set @sql = 'create login ' + quotename(@login) + ' with password = ' + quotename(@password, '''')
?
16 июн 11, 09:59    [10819897]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить