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

Откуда:
Сообщений: 282
Коллеги, добрый день.
При разборе примера на контроль прав пользователей с помощью сертификатов, возник вопрос: если я создаю пользователя (U1) с авторизацией по сертификату и потом даю ему права на чтение какой - либо таблицы (T1), все ли пользователи, имеющие цифровую подпись, основанную на этом же сертификате, к процедуре, выполняющую чтение из этой же таблицы получают те же права на таблицу T1, что и пользователь U1? Нельзя ли обойти ситуацию, когда создается дополнительный пользователь при необходимости выдать права одному - единственному?

Примерный код:
CREATE DATABASE test;
GO
USE test;
GO
CREATE TABLE T1 (a numeric);
INSERT INTO T1 VALUES (1);
--Создаем пользователя с сертификатом и правами на чтение
CREATE CERTIFICATE csSelectT
  ENCRYPTION BY PASSWORD = '12345678';
CREATE USER U1 FROM CERTIFICATE csSelectT;
GRANT SELECT ON T1 TO ucsSelectT1;

-- Создаем пользователя для цифровой подписи
CREATE LOGIN U2 WITH PASSWORD = '12345678';
CREATE USER U2;

-- Создание процедуры
CREATE PROCEDURE proc1 AS
BEGIN
    SELECT * FROM T1;
END;
GO
GRANT EXECUTE ON proc1 to public;
GO
--создаем цифровую подпись
ADD SIGNATURE TO proc1 BY CERTIFICATE csSelectT 
WITH PASSWORD = '12345678';
--выполняем
EXECUTE AS LOGIN = 'U2';
    EXEC proc1;
REVERT;
18 ноя 15, 12:23    [18434673]     Ответить | Цитировать Сообщить модератору
 Re: Использование инструкции CREATE USER FROM CERTIFICATE  [new]
o-o
Guest
baza906
все ли пользователи, имеющие цифровую подпись, основанную на этом же сертификате

чего?
какая еще подпись у пользователей?
подпись -- у процедуры.
а пользователя вы создаете или из сертификата, или из логина.
так откуда у create user from login какая-то "цифровая подпись, основанная на этом же сертификате"
18 ноя 15, 12:28    [18434703]     Ответить | Цитировать Сообщить модератору
 Re: Использование инструкции CREATE USER FROM CERTIFICATE  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
baza906,

сертификаты же используют не для раздачи прав, а для подтверждения подлинности. Права назначаются пользователю или группе.
18 ноя 15, 12:32    [18434737]     Ответить | Цитировать Сообщить модератору
 Re: Использование инструкции CREATE USER FROM CERTIFICATE  [new]
o-o
Guest
вы создаете сертификат и из него юзера.
юзеру даете какие-то права,
а процедуру подписываете сертификатом.
после этого к правам исполнителя процедуры
добавятся права юзера, созданного из сертификата.
на время выполнения процедуры и лишь внутри нее
18 ноя 15, 12:33    [18434745]     Ответить | Цитировать Сообщить модератору
 Re: Использование инструкции CREATE USER FROM CERTIFICATE  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
o-o,

да, несколько иной механизм, я не точно описал. В данном случае получается, что сертификат имеет смысл владения.
18 ноя 15, 12:36    [18434767]     Ответить | Цитировать Сообщить модератору
 Re: Использование инструкции CREATE USER FROM CERTIFICATE  [new]
baza906
Member

Откуда:
Сообщений: 282
o-o, это я и хотел узнать, спасибо. еще 1 вопрос, если можно - что будет, если из сертификата создать несколько пользователей с разными правами?
18 ноя 15, 12:37    [18434775]     Ответить | Цитировать Сообщить модератору
 Re: Использование инструкции CREATE USER FROM CERTIFICATE  [new]
baza906
Member

Откуда:
Сообщений: 282
Владислав Колосов, можно вкратце расшифровать термин "смысл владения сертификатом"?
18 ноя 15, 12:39    [18434791]     Ответить | Цитировать Сообщить модератору
 Re: Использование инструкции CREATE USER FROM CERTIFICATE  [new]
o-o
Guest
[quot Владислав Колосовсертификат имеет смысл владения.[/quot]
владения кем/чем?
сертификат это один из способов раздачи прав
на какие-то действия с объектами внутри модуля
без выдачи прав непосредственно на эти объекты
BOL
SQL Server 2005 introduced the capability to sign modules within the database, such as stored procedures, functions, triggers, or assemblies.
The intent is to be able to grant access to end users on the entry level objects, which then access the underlying objects on behalf of the user.
End users thus do not have to be granted access on all the objects in the application schema.

Module Signing (Database Engine)
18 ноя 15, 12:45    [18434827]     Ответить | Цитировать Сообщить модератору
 Re: Использование инструкции CREATE USER FROM CERTIFICATE  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
baza906,

так как если бы процедура выполнялась от имени владельца процедуры со всеми его правами.
Например, пользователь, который вызывает процедуру не имеет доступа к объектам, которые использует процедура, а владелец процедуры - имеет.
Используя тот же сертификат, например, в разных базах, насколько я помню, можно получить доступ к данным других баз не имея на то непосредственных прав. К сожалению, я сертификатами активно не пользовался, детально не могу рассказать.
18 ноя 15, 12:47    [18434833]     Ответить | Цитировать Сообщить модератору
 Re: Использование инструкции CREATE USER FROM CERTIFICATE  [new]
baza906
Member

Откуда:
Сообщений: 282
Владислав Колосов, понял, спасибо!
18 ноя 15, 12:50    [18434850]     Ответить | Цитировать Сообщить модератору
 Re: Использование инструкции CREATE USER FROM CERTIFICATE  [new]
o-o
Guest
baza906
что будет, если из сертификата создать несколько пользователей с разными правами?

вы не создадите более одного юзера из данного сертификата:
Msg 15063, Level 16, State 1, Line 1
The login already has an account under a different user name.
18 ноя 15, 12:51    [18434854]     Ответить | Цитировать Сообщить модератору
 Re: Использование инструкции CREATE USER FROM CERTIFICATE  [new]
baza906
Member

Откуда:
Сообщений: 282
o-o, вопрос закрыт. спасибо
18 ноя 15, 12:53    [18434870]     Ответить | Цитировать Сообщить модератору
 Re: Использование инструкции CREATE USER FROM CERTIFICATE  [new]
o-o
Guest
Владислав Колосов
так как если бы процедура выполнялась от имени владельца процедуры со всеми его правами.
Например, пользователь, который вызывает процедуру не имеет доступа к объектам, которые использует процедура, а владелец процедуры - имеет.
Используя тот же сертификат, например, в разных базах, насколько я помню, можно получить доступ к данным других баз не имея на то непосредственных прав. К сожалению, я сертификатами активно не пользовался, детально не могу рассказать.

и откуда эти фантазии?
владелец это владелец.
и если хотите исполнять процедуру с правами владельца,
вы используете EXECUTE AS OWNER.
и права владельца будут добавлены к правам исполнителя.
и где тут сертификат?
---
более того, если в процедуре, созданной с EXECUTE AS OWNER
выполнить SELECT USER
вам выпадет owner (не слово овнер, а юзер-владелец).
типа, внутри процедуры вы -- овнер.
а если сделать то же самое из подписанной процедуры,
юзер выдастся тот самый, что исполняет,
а не сертификатный.
не надо имперсонэйт (execute as) с сертификатами смешивать
18 ноя 15, 12:57    [18434897]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить