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

Откуда: Екатеринбург
Сообщений: 158
На сервере в базе данных есть хранимая процедура которая возвращает булево значение показывающая является ли пользователь базы данных логином сервера.
Проблема: Не всегда возвращает значение !
Уже пробовал: WITH EXECUTE AS OWNER все ровно не помогает.
Как можно это реализовать?
17 апр 12, 15:28    [12428074]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к server_principals  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Абстрактная процедура на абстрактом сервере, которая еще и не работает. Да, это тяжелый случай.
Подсказка -- см. справку для sys.database_principals, столбец sid.
17 апр 12, 15:39    [12428197]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к server_principals  [new]
Денис Б.
Member

Откуда: Екатеринбург
Сообщений: 158
invm
Абстрактная процедура на абстрактом сервере, которая еще и не работает. Да, это тяжелый случай.
Подсказка -- см. справку для sys.database_principals, столбец sid.


причем тут sid
17 апр 12, 15:48    [12428277]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к server_principals  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Денис Б.
причем тут sid
Ну читать доку совсем неохота, да?
А sid тут при том, что по его значению можно найти соответствующий логин.
17 апр 12, 16:00    [12428389]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к server_principals  [new]
Денис Б.
Member

Откуда: Екатеринбург
Сообщений: 158
invm
Денис Б.
причем тут sid
Ну читать доку совсем неохота, да?
А sid тут при том, что по его значению можно найти соответствующий логин.

Server: sql 2008 R2

Конечно можно а если на новый сервер бэкАп накатили в базе есть пользователи а логинов их нет а это значит что sid у них есть, причем тут sid? Вопрос в другом был можно ли дать прова а выбор роли из таблицы Server_principals
19 апр 12, 05:34    [12436787]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к server_principals  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Денис Б.,

Процедуру вашу показывайте.
19 апр 12, 09:35    [12437150]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к server_principals  [new]
Glory
Member

Откуда:
Сообщений: 104751
Денис Б.
Вопрос в другом был можно ли дать прова а выбор роли из таблицы Server_principals

разумеется можно
Для этого в статье хелпа о команде GRANT нужно найти соответствующую категорию прав
Вот только выданных прав может оказаться лишку для рядового пользователя
19 апр 12, 09:58    [12437319]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к server_principals  [new]
Денис Б.
Member

Откуда: Екатеринбург
Сообщений: 158
Glory
Денис Б.
Вопрос в другом был можно ли дать прова а выбор роли из таблицы Server_principals

разумеется можно
Для этого в статье хелпа о команде GRANT нужно найти соответствующую категорию прав
Вот только выданных прав может оказаться лишку для рядового пользователя
Я пробовал делать с GRAND, но к сожаленью у меня не получилось ((
Если не сложно напишите пример синтаксиса
19 апр 12, 10:16    [12437441]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к server_principals  [new]
Glory
Member

Откуда:
Сообщений: 104751
Денис Б.
Я пробовал делать с GRAND, но к сожаленью у меня не получилось

"Пробовал с GRAND" - это ваша команда ?
"У меня не получилось" - это сообщение об ошибке ?
19 апр 12, 10:18    [12437455]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к server_principals  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Денис Б.,

Ну продолжайте партизанить, дело ваше.

Чтобы можно было видеть чужие логины в sys.server_principals, вы должны выдать логину разрешение уровня сервера view any definition.
19 апр 12, 10:27    [12437501]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к server_principals  [new]
Денис Б.
Member

Откуда: Екатеринбург
Сообщений: 158
Запрос(Хр. процедура) проще некуда: Из приложение приходит название логина в случае если логин есть на сервере то возвращается 1 если нет соответственно 0

USE [<НазваниеБД>]

SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO

-- =============================================
-- Author:	<Брусницын Д.И.>
-- Create date: <29.03.2012>
-- Class:       Ядро.Пользователь
-- Description:	<Показывает зарегистрирован ли сотрудник на сервере>
-- =============================================
ALTER procedure [dbo].[Пользователь_ПроверитьРегистрациюНаСервере]
@Логин varchar (100)
--WITH EXECUTE AS OWNER
as
Begin

declare @Результат bit

if exists ( select *
From sys.Server_principals
where name = @Логин )
select @Результат = 1
else 
select @Результат = 0 

select @Результат

end
20 апр 12, 15:26    [12446484]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к server_principals  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Денис Б.,

Во-первых, если озвучите решаемую задачу, а не способ ее решения, то сможете получить более полноценную помощь. Т.е. ответьте на вопрос: Задлянафига потребовалась такая проверка?

Во-вторых, ваша проверка некорректна, т.к. не учитывается тип принципала.

Во-третьих, чтобы иметь возможность доступа к требуемым данным в sys.server_principals, вы можете:
1. Воспользоваться вот этим способом -- https://www.sql.ru/blogs/decolores/950
2. Явно дать каждому логину, из-под которого будет выполнятся эта процедура, разрешение view definition на логины, которые будут проверяться.
3. Каждому логину, из-под которого будет выполнятся эта процедура, дать разрешение view any definition.

Пп. 2 и 3 лучше не применять вовсе.
20 апр 12, 16:49    [12447195]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить