Разработка баз данныхРазработка баз данных

 Программирование  Программы  Ссылки  Обратная связь
     
. . .
. . .
startpage.htm Новости
about.htm О сайте
fileformat.htm I. Выбор технологии
clientserver.htm Преимущества клиент-серверной технологи
prepare.htm Переход от MDB к ADP
upsizing.htm Инструменты переноса данных
setupserver.htm Выбор версии и установка сервера
selectclient.htm Выбор версии MSAccess
formsreports.htm II. Формы, Отчеты MSAccess
queries.htm Запросы / ADO
inputparameters.htm Передача входных параметров
data_drivers.htm Библиотеки доступа к данным
forms.htm Формы MSAccess
requery.htm Обновление данных в форме
updatableform.htm Обновляемость данных в форме
dialogform.htm Остановка кода пока открыта форма
formsaverecord.htm Сохранить текущую запись
formgotorecord.htm Переход по записям формы
sumform.htm Итоги в формах
serverfiltersample.htm Пример серверного фильтра
formerror.htm Причина Ошибки #Error
menubarevent.htm Перехват нажатия на кнопку меню
woconditionalformat.htm Раскраска строк ленточной формы без условного форматирования
currrec.htm Выделение цветом текущей записи
subform.htm Подчиненные Формы
textboxenter.htm Ввод перевода строки
twimagelistbug.htm treview + imagelist + подч. форма
reports.htm Отчеты, общие рекомендации
report_input_parameters.htm Входные параметры
vbaprog.htm III. Программирование VBA
dbpic.htm Картинки в базе данных
binbmp.htm Двоичные данные картинки в поле таблицы базы данных
piclink.htm Хранение ссылок на файлы
picjpg.htm Бинарное содержимое JPG, Gif файла в бинарном поле базы данных
playsound.htm Воспроизведение звуков
tv.htm Функции для тривью
restartaccess.htm Перезапуск Аксесса
publicvariables.htm Передача и хранение параметров и настроек
collectionfunctions.htm Коллекция полезных функций
datepicker.htm Всплывающий календарик
menuhummer.htm Меню и тулбары
padeg.htm Склонение по падежам
comborowsource.htm Источник данных для поля со списком
filedialog.htm Диалог выбора файла / папки
sendmapi.htm Отправка почты (4 способа) + архивация
autoupdateclient.htm Автоматическое обновление клиентской части
licenses.htm  Устранение проблем с регистрацией компонентов
uncommented.htm Без коментариев
filetime.htm Время и дата файла
reportsample.htm Пример настраивомого отчета
adpformfilter.htm Серверный Фильтр by GEO
tempmdb.htm ADP: Временный MDB для временных таблиц
mutex.htm Запрет запуска нескольких копий приложения
translit.htm Транслитерация всего проекта.
updateident.htm Изменение счетчика
webinterface.htm IV WEB
accessinternet.htm Работа с аксесс через интернет
webupdate.htm Обновление приложения аксесс через интернет
msiecom.htm Программное управление веббраузером
sqlserver.htm MS SQL
mssqltransfer2.htm Перенос/копирование баз
mssqlperm.htm Adp проверка прав пользователя перед открытием формы или управление доступностью полей формы
mssqlcrossdatabase.htm  Межбазовые разрешения
tsqlcollection.htm T-sql коллекция
similarity.htm Сортировка по созвучности
esp.htm расширенные хранимые процедуры
mssqloptimizing.htm Оптимизация быстродействия
    

Межбазовые разрешения

 
Cхема управления правами доступа MSSQL


Как известно, если создать хранимую процедуру которая будет  
запрашивать (возможно с наложением фильтра на строки или столбцы)  
данные из таблиц, к которым у конкретного пользователя запускающего процедуру, доступа нет то выборка этих данных в рамках одной базы данных осуществляется c правами пользователя, создавшего хранимую процедуру к объектам этого пользователя. В случае если данные надо выбирать из другой базы данных то такая конструкция не работала в MSSQL 2000 до версии 2000 SP3 и требовалость прописывать явные права к объектам другой базы данных для каждого пользователя.  
 
 
Начиная с MSSQL 2000 SP3 работает следующая конструкция:  
1. заводим роль базы данных для группы пользователей выполняющих однородные задачи.  
2. даем этой роли права только на ограниченный набор таблиц и запросов.  
 
при необходимости получения доступа этих пользователей к данным из других баз данных:  
1. DBO (имеющий права к другой базе) создает хранимку или представление которая использует данные из других баз данных (в которые не имеют прав члены роли)  
2. Назначаются разрешения для работы с этой хранимкой для членов роли  
     
Что мы получаем?  
нет необходимости вводить пользователей во все базы данных откуда им нужно получать данные и назначать им конкретные разрешения на каждую таблицу.  
 
Что нужно сделать чтоб это все работало?  
 
1. задействовать Cross DB Ownership Chaining (это сказано в BOL)  
Либо включить опцию  
Cross DB Ownership Chaining - для обеих баз участвующих в связке  
либо настроить сервер - включить для всех баз.  
exec sp_configure 'Cross DB Ownership Chaining', 1  
RECONFIGURE  
или  
 
EXEC sp_dboption 'ИмяБазы', 'db chaining', 'True'  
 
2. Добавить пользователя c именем guest в базу из которой будут получаться данные. (Об этом BOL молчит.)  
Можно не давать ему никаких прав, просто нужно чтоб он был в БД которая будет давать к себе доступ.  
 
3. Если получем сообщение об ошибке : несмотря на то что овнер обеих баз один и тот же - переназначить еще раз овнером один и тот же логин  
 
 
Решение проблем по шагам:  
 
для теста берем две базы   
cocdb - база в которой таблица с данными  
northwind - база из которой тестовый пользователь не имеющий прав к cocdb должен через хранимку извлечь данные  
 
--------------------------------------------------------------   
1. включаем опцию crossdatabase ownership chaining для обеих баз,   
из которой идет запуск хранимки, и из которой  хранимка извлекает данные  
либо   
включаем эту опцию для сервера целиком и рестартуем его  
 
--------------------------------------------------------------   
2 создаем тестового пользователя 'coc' и даем ему доступ только к базе   
в которой хранимка и права на запуск только этой хранимки  
 
при попытке запустить хранимку от пользователя:   
 
Server: Msg 916, Level 14, State 1, Procedure _testcoc, Line 4  
Server user 'coc' is not a valid user in database 'cocdb'.  
 
--------------------------------------------------------------   
3 добавляем учетку  guest  в бд откуда будут выбираться данные   
cocdb (роль только  паблик, никаких явных прав!!!)  
 
при попытке запустить хранимку от пользователя может быть ошибка:   
 
Server: Msg 229, Level 14, State 5, Procedure _testcoc, Line 4  
SELECT permission denied on object 'authRight', database 'cocdb', owner 'dbo'.  
 
--------------------------------------------------------------   
4 Насмотря на то что   
sp_helpdb 'cocdb'  и sp_helpdb 'Northwind' выдают одного и того же овнера нужно   
переназначить овнером один и тот же логин, например sa  
 
use northwind  
EXEC sp_changedbowner 'sa'  
 
use cocdb  
EXEC sp_changedbowner 'sa'  
 
теперь  
все работает  
--------------------------------------------------------------   
ps: в MSSQL 2005 необходимо выполнить :
use база_данных_в_которой_таблица
sp_grantdbacces 'guest'
 
. . .
. . .
© 2000 - 2009 Алексей Козин эта вебстраница является зеркалом сайта www.msdatabase.ru Рейтинг@Mail.ru
Hosted by uCoz