Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Межбазовые цепочки владения  [new]
Vlad_ZJ
Member

Откуда:
Сообщений: 85
Всем доброго дня
Нужен совет
В хранимой процедуре есть блок кода для записи в таблицу
другой БД, как лучше организовать такой доступ?
возможно с использованием межбазовых цепочек владения ?

заранее благодарен

версия сервера
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
12 янв 15, 13:01    [17105473]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
Crimean
Member

Откуда:
Сообщений: 13148
слишком много "или". однозначного ответа не будет
12 янв 15, 13:36    [17105703]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
Vlad_ZJ
Member

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

есть пользователь П1 c разрешением выполнять
процедуру в БД1, в которой есть обновление таблицы в БД2
как лучше дать П1 такую возможность без каких либо других привилегий,
вот и подумал может как-то заюзать межбазовую цепочку владения
12 янв 15, 13:46    [17105790]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
Glory
Member

Откуда:
Сообщений: 104760
Vlad_ZJ
как лучше дать П1 такую возможность

Лучше для чего/кого ?

Vlad_ZJ
вот и подумал может как-то заюзать межбазовую цепочку владения

Вообще то межбазовая цепочка владения как раз для этого и придумывалась.
12 янв 15, 14:08    [17105909]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
o-o
Guest
а я помню ТС, у него сервер непатченный и с цепочками владения уже один раз не ладилось.
т.е. все овнеры совпадали, а через процедуру он получал отлуп без выдачи прав на таблицу.
Vlad_ZJ, у вас что-то конкретное не получается или просто интересуетесь, не вредно ли это для здоровья сервера
и прочего всеобщего благополучия?
про Potential Threats вот тут можно почитать в одноименном разделе: Ownership Chains
я советую не недооценивать овнеров баз, они порой находят хорошие дыры...и не обязательно в цепочках владения :)
12 янв 15, 14:31    [17106082]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
Vlad_ZJ
Member

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

есть задача в которой пользователям нужно определенные действия делать
в двух базах, вот стал вопрос, как это сделать с максимальным уровнем
безопасности. Права этим простым смертным раздаются только на процедуры.
Хочется решить это в бы в общепринятых стандартах и механизмах сервера
12 янв 15, 15:45    [17106583]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
Glory
Member

Откуда:
Сообщений: 104760
Vlad_ZJ
Хочется решить это в бы в общепринятых стандартах и механизмах сервера

Нет стандарта. Есть способы.
12 янв 15, 15:48    [17106594]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Vlad_ZJ
Всем доброго дня
Нужен совет
В хранимой процедуре есть блок кода для записи в таблицу
другой БД, как лучше организовать такой доступ?
возможно с использованием межбазовых цепочек владения ?

заранее благодарен

версия сервера
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)


еще можно на основе сертификатов и подписью хранимки.
12 янв 15, 15:56    [17106633]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
o-o
Guest
Vlad_ZJ
есть задача в которой пользователям нужно определенные действия делать
в двух базах, вот стал вопрос, как это сделать с максимальным уровнем
безопасности. Права этим простым смертным раздаются только на процедуры.

если нет db_owner-ов таких что кто-то из них овнер в одной базе и совсем не овнер в другой,
то через цепочки и сделать.
с сертификатами конечно жутко безопасно, но ровно столько же и муторно
12 янв 15, 16:08    [17106712]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
Vlad_ZJ
Member

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

а можно пару намеков, с этими цепочками что за чем делать,
заранее благодарен
12 янв 15, 16:49    [17106952]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
o-o
Guest
Vlad_ZJ,
так просто на обеих базах включить:
alter database db1 
set db_chaining on;
alter database db2 
set db_chaining on;

я тоже всегда забываю, как опция называется, мне упорно лезет на ум "cross_db_..."
тогда иду в хэлп ALTER DATABASE SET Options (Transact-SQL) и там поиск на "cross", сразу выпадает DB_CHAINING
12 янв 15, 17:08    [17107075]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Vlad_ZJ
o-o,

а можно пару намеков, с этими цепочками что за чем делать,
заранее благодарен


+ пример

-- создаем базы, объекты в них и цепочку владельцев
use master;
go

create database db1;
go

create database db2;
go

create login l with password = 'P@ssw0rd1w2w2';
go

use db1;
go

create table t(id int, name nvarchar(100));
go

create procedure insert_into_db2_t
as
begin
	set nocount on;

    insert into db2.dbo.t default values;
end
go

create user u for login l;
go

alter authorization on t to u;
alter authorization on insert_into_db2_t to u;
go

use db2 
go

create table t(id int, name nvarchar(100));
go

create procedure insert_into_db1_t
as
begin
	set nocount on;

    insert into db1.dbo.t default values;
end
go

create user u for login l;
go

alter authorization on t to u;
alter authorization on insert_into_db1_t to u;
go

use master;
go

-- cross db chaining
alter database db1 set db_chaining on;
go
alter database db2 set db_chaining on;
go

-- создаем тестовые учетки и раздаем права
create login test_login with password = 'P@ssw0rd2asdvas';
go

use db1;
go

create user test_user for login test_login;
go

grant execute on insert_into_db2_t to test_user;
go

use db2;
go

create user test_user for login test_login;
go

grant execute on insert_into_db1_t to test_user;
go


-- тестим

use db1;
go

execute as login = 'test_login'

exec insert_into_db2_t;

revert;

use db2;
go

execute as login = 'test_login'

exec insert_into_db1_t;

revert;

12 янв 15, 17:16    [17107132]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
Vlad_ZJ
Member

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

спасибо буду тестировать
13 янв 15, 09:16    [17108949]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
Vlad_ZJ
Member

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

все заработало спасибо, вот как бы так сделать чтоб на db2 не
создавать юзера test_user а например через имперсонализацию(например) через
юзера U там есть для механизма записи db1 -> db2
не хотелось бы всех юзерей db1 перегонять на базу db2
13 янв 15, 10:53    [17109519]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Vlad_ZJ
churupaha,

все заработало спасибо, вот как бы так сделать чтоб на db2 не
создавать юзера test_user а например через имперсонализацию(например) через
юзера U там есть для механизма записи db1 -> db2
не хотелось бы всех юзерей db1 перегонять на базу db2


test_user можно и не создавать в обоих базах. это пользователь базы, у которого есть execute на хранимку.
13 янв 15, 11:37    [17109807]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
Vlad_ZJ
Member

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

проверено не будет работать
13 янв 15, 11:48    [17109875]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
Vlad_ZJ
Member

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

Msg 916, Level 14, State 1, Procedure insert_into_db2_t, Line 7
Серверу-участнику "test_login" не удалось обратиться к базе данных "db2" в текущем контексте безопасности.
13 янв 15, 11:49    [17109879]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Vlad_ZJ,

если вы в примере просто дропнули пользователя test_user и не позаботились о том, чтобы для логина test_login существовал пользователь в базе db1 с правом выполнения на хранимку, то логично:

автор
Серверу-участнику "test_login" не удалось обратиться к базе данных "db2" в текущем контексте безопасности.


ваш вопрос выше понял так: "не хочется дублировать пользователей из одной базы в другую". опишите подробнее.
13 янв 15, 12:00    [17109933]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
если вы в примере просто дропнули пользователя test_user и не позаботились о том, чтобы для логина test_login существовал пользователь в базе db1 с правом выполнения на хранимку:
13 янв 15, 12:05    [17109962]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
автор
если вы в примере просто дропнули пользователя test_user и не позаботились о том, чтобы для логина test_login существовал пользователь в базе db2 с правом выполнения на хранимку:
13 янв 15, 12:08    [17109970]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
Vlad_ZJ
Member

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

выполнил скрипт все заработало
в двух базах есть test_user
в db1 - test_user имеет право на выполнение dbo.insert_into_db2_t
в db2 - test_user имеет право на выполнение dbo.insert_into_db1_t

процедуры рабочие,

затем я дропаю в db2 пользователя test_user и в db1 процедура
dbo.insert_into_db2_t перестает работать

ошибка выше, вот...
13 янв 15, 12:09    [17109974]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
o-o
Guest
Vlad_ZJ,
вы всех запутали названием темы и хотелкой.
давайте наведем порядок.
если вы хотите задействовать цепочки владения, то надо осознать, что они делают.
они не позволяют избежать создания юзеров в соседней базе, они лишь позволяют избежать проверку их прав.
если вы не хотите всех юзеров тащить в другую базу, то решения 2, но они оба без цепочек.
это идеологически правильное через сертификаты либо execute as + trustworthy.
второе -- это тоже хорошая дыра для db_owner-ов первой базы,
после включения на первой trustworthy, они будут хозяйничать и во второй, где они (возможно) никто.
но если у вас с db_owner-ами все ок, то давайте сделаем execute as + trustworthy
13 янв 15, 12:16    [17110006]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
Vlad_ZJ

ошибка выше, вот...


я понял что вы делаете. ответ выше.
13 янв 15, 12:17    [17110009]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
Vlad_ZJ
Member

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

спасибо за диалог

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

как по Вашему мнению, на каком механизме лучше остановится?
овнеры на всех базах с одинаковыми правами
13 янв 15, 12:30    [17110090]     Ответить | Цитировать Сообщить модератору
 Re: Межбазовые цепочки владения  [new]
o-o
Guest
Vlad_ZJ
вот как бы так сделать чтоб на db2 не
создавать юзера test_user а например через имперсонализацию(например) через
юзера U там есть для механизма записи db1 -> db2
не хотелось бы всех юзерей db1 перегонять на базу db2

у вас должен быть 1 логин (U), отмапленный в обе базы.
во второй базе у него должны быть все необходимые права.
в первой он может быть вообще бесправным, просто отмапили и все.
на первой базе включаете trustworthy:
alter database db1 set trustworthy on

теперь в первой базе создаете ваши процедуры, хозяйничающие во второй базе
через имперсонализацию:
use db1;
go

create proc dbo.usp_smth_in_db2 
with execute as 'u'
as
select *
from db2.dbo.t;


все.
на эти процедуры даете execute юзерам первой базы и они будут во второй что-то делать от имени этого U.
проверяйте.
13 янв 15, 12:31    [17110095]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить